From 443ba0aada2de1622197b2b52cda8d485f973d2b Mon Sep 17 00:00:00 2001 From: Felix Kummer Date: Wed, 7 Aug 2024 15:11:40 +0200 Subject: [PATCH 01/38] Implemented minor reviewer requests --- README.md | 5 ++- bin/merge_boa.r | 5 ++- bin/merge_qai.r | 5 ++- bin/test.R | 15 -------- docs/output.md | 12 +++---- docs/usage.md | 36 +++++++++---------- modules/local/check_results.nf | 2 -- modules/local/check_results_full.nf | 2 -- modules/local/force-generate_analysis_mask.nf | 2 -- .../local/force-generate_tile_allow_list.nf | 2 -- modules/local/force-higher_level.nf | 2 -- modules/local/force-mosaic.nf | 2 -- modules/local/force-preprocess.nf | 2 -- modules/local/force-pyramid.nf | 2 -- modules/local/higher_level_force_config.nf | 2 -- modules/local/merge.nf | 2 -- modules/local/preprocess_force_config.nf | 2 -- nextflow.config | 20 +++++------ nextflow_schema.json | 22 ++++++------ subworkflows/local/higher_level.nf | 3 -- subworkflows/local/preprocessing.nf | 5 +-- 21 files changed, 50 insertions(+), 100 deletions(-) diff --git a/README.md b/README.md index e5516b9..a95323f 100644 --- a/README.md +++ b/README.md @@ -28,8 +28,7 @@ 5. Time series analyses to obtain trends in vegetation dynamics 6. Create mosaic and pyramid visualizations of the results -7. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/)) -8. Present QC for raw reads ([`MultiQC`](http://multiqc.info/)) +7. Present QC results ([`MultiQC`](http://multiqc.info/)) ## Usage @@ -41,7 +40,7 @@ To run the pipeline on real data, input data needs to be acquired. Concretely, s Now, you can run the pipeline using: ```bash -nextflow run nf-core/rangeland/main.nf \ +nextflow run nf-core/rangeland \ -profile \ --input \ --dem \ diff --git a/bin/merge_boa.r b/bin/merge_boa.r index 27779ad..622ba08 100755 --- a/bin/merge_boa.r +++ b/bin/merge_boa.r @@ -1,5 +1,7 @@ #!/usr/bin/env Rscript +require(raster) + args = commandArgs(trailingOnly=TRUE) @@ -11,9 +13,6 @@ fout <- args[1] finp <- args[2:length(args)] nf <- length(finp) -require(raster) - - img <- brick(finp[1]) nc <- ncell(img) nb <- nbands(img) diff --git a/bin/merge_qai.r b/bin/merge_qai.r index fc9066f..99f2cff 100755 --- a/bin/merge_qai.r +++ b/bin/merge_qai.r @@ -1,5 +1,7 @@ #!/usr/bin/env Rscript +require(raster) + args = commandArgs(trailingOnly=TRUE) @@ -11,9 +13,6 @@ fout <- args[1] finp <- args[2:length(args)] nf <- length(finp) -require(raster) - - img <- raster(finp[1]) nc <- ncell(img) diff --git a/bin/test.R b/bin/test.R index 2c5b0d5..173cdbb 100755 --- a/bin/test.R +++ b/bin/test.R @@ -116,21 +116,6 @@ peak_year_of_change <- peak_rast["YEAR-OF-CHANGE"] -# FOR REFERENCE: SAVE RASTERS -####################################################################### - -#writeRaster(woody_cover_changes, "woody_cover_chg_ref.tif") -#writeRaster(woody_cover_year_of_change, "woody_cover_yoc_ref.tif") - -#writeRaster(herbaceous_cover_changes, "herbaceous_cover_chg_ref.tif") -#writeRaster(herbaceous_cover_year_of_change, "herbaceous_cover_yoc_ref.tif") - -#writeRaster(peak_changes, "peak_chg_ref.tif") -#writeRaster(peak_year_of_change, "peak_yoc_ref.tif") - - - - # COMPARE TESTRUN WITH REFERENCE EXECUTION ####################################################################### failure <- FALSE diff --git a/docs/output.md b/docs/output.md index 59dff46..f4e86f3 100644 --- a/docs/output.md +++ b/docs/output.md @@ -32,7 +32,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d [untar](https://nf-co.re/modules/untar) is a nf-core module used to extract files from tar archives. -Invokation of untar depends on certain parameters (i.e input_tar, dem_tar and wvdb_tar). Thus, the outputs files are only generated when these are set to true. +Invokation of untar depends on certain parameters (i.e `input_tar`, `dem_tar` and `wvdb_tar`). Thus, the outputs files are only generated when these are set to `true`. ### Preparation @@ -76,7 +76,7 @@ Logs and analysis-ready-data (ARD) are generated using the [force-l2ps](https:// - `higher-level//` - `param_files/`: Parameter files used in [force-higher-level](https://force-eo.readthedocs.io/en/latest/components/higher-level/index.html). - - `trend_files`: Symlinks to trend files that are the result of higher-level processing. + - `trend_files/`: Symlinks to trend files that are the result of higher-level processing. @@ -84,7 +84,7 @@ Higher level processing consist of two parts, generating parameter files and per Parameter files may be consulted to derive information about the specific processing task performed for a given tile. In this workflow, classification using spectral unmixing is performed. -Spectral unmixing is a common technique to derive sub-pixel classification. Concretely, a set of endmember (provided using `--endmember`) is consulted to determine fractions of different types of vegetation, soil, $\ldots$ for each pixel. +Spectral unmixing is a common technique to derive sub-pixel classification. Concretely, a set of endmember (provided using `--endmember`) is consulted to determine fractions of different types of vegetation, soil, ... for each pixel. Next, time series analysis for different vegetation characteristics is performed. @@ -99,8 +99,8 @@ If the `return_tss` parameter was set to `true`, the pipeline will also output f - `trend/` - `mosaic//` - - ``: Auxiliary files for the mosaic visualization. - - `mosaic`: Contains a single virtual raster file that defines the mosaic visualization. + - `/`: .tif files that are part of the mosaic. + - `mosaic/`: Contains a single virtual raster file that combines the .tif files into the mosaic visualization. - `pyramid//trend//`: Contains tile-wise pyramid visualizations for every trend analyzed in the workflow. @@ -121,7 +121,7 @@ Two types of common visualizations are generated in the last step of the pipelin [MultiQC](http://multiqc.info) is a visualization tool that generates a single HTML report summarising all samples in your project. Most of the pipeline QC results are visualised in the report and further statistics are available in the report data directory. -Results generated by MultiQC collate pipeline QC from supported tools e.g. FastQC. The pipeline has special steps which also allow the software versions to be reported in the MultiQC output for future traceability. For more information about how to use MultiQC reports, see . +Results generated by MultiQC collate pipeline QC from supported tools. The pipeline has special steps which also allow the software versions to be reported in the MultiQC output for future traceability. For more information about how to use MultiQC reports, see . ### Pipeline information diff --git a/docs/usage.md b/docs/usage.md index 90aaca1..5413516 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -16,7 +16,7 @@ For infos on Landsat, see [here](https://www.usgs.gov/core-science-systems/nli/l Satellite data should be given as a path to a common root of all imagery. This is a common format used in geographic information systems, including FORCE, which is applied in this pipeline. The expected structure underneath the root directory should follow this example: -``` +```tree root ├── 181035 │ └── LE07_L1TP_181035_20061217_20170106_01_T1 @@ -53,7 +53,7 @@ root └── ... ``` -Subdirectories of root contain _path_ and _row_ information as commonly used for Landsat imagery. As an example, the sub directory `181036/` contains imagery for path 18 and row 1036. +Subdirectories of `root/` contain _path_ and _row_ information as commonly used for Landsat imagery. As an example, the sub directory `181036/` contains imagery for path 18 and row 1036. The next level of subdirectories contains the data for a specific day and from a specific source. Lets look at the example `LE07_L1TP_181036_20061217_20170105_01_T1`: @@ -68,14 +68,14 @@ The next level of subdirectories contains the data for a specific day and from a On the lowest level of the structure, the actual data is stored. Looking at the contents of `LE07_L1TP_181036_20061217_20170105_01_T1`, we see that all files share the same prefix, followed by a specification of the specific files contents. These suffixes include: - "B" followed by a number _i_ identifying the band of the satellite (band 6 has two files as Landsat 7 has two thermal bands) -- "BQA" identifying the quality information band +- "BQA" identifies the quality information band - "GCP" identifies ground control point information - "ANG" identifies angle of observation and other geometric information information - "MTL" identifies meta data -All files within the lowest level of structure belong to a single observation. Files containing imagery (prefix starts with "B") should be .tif files. Files containing auxiliary data are text files. +All files within the lowest level of structure belong to a single observation. Files containing imagery (prefix starts with "B") should be `.tif` files. Files containing auxiliary data are text files. -This structure is automatically generated when [using force to download the data](https://force-eo.readthedocs.io/en/latest/components/lower-level/level1/level1-csd.html?). We strongly suggest users to download data using FORCE (e.g.). For example, executing the following code (e.g. with [FORCE in docker](https://force-eo.readthedocs.io/en/latest/setup/docker.html)) will download data for Landsat 4,5 and 7, in the time range from 1st January 1984 until 31st December 2006, including pictures with up to 70 percent of cloud coverage: +This structure is automatically generated when [using force to download the data](https://force-eo.readthedocs.io/en/latest/components/lower-level/level1/level1-csd.html?). We strongly suggest users to download data using FORCE. For example, executing the following code (e.g. with [FORCE in docker](https://force-eo.readthedocs.io/en/latest/setup/docker.html)) will download data for Landsat 4,5 and 7, in the time range from 1st January 1984 until 31st December 2006, including pictures with up to 70 percent of cloud coverage: ```bash mkdir -p meta @@ -84,7 +84,7 @@ mkdir -p data force-level1-csd -s "LT04,LT05,LE07" -d "19840101,20061231" -c 0,70 meta/ data/ queue.txt vector/aoi.gpkg ``` -Note that you need to pass an area-of-interest file, see the area of interest section [Area of interest](#aoi) for details. +Note that you need to pass an area-of-interest file, see the area of interest section [Area of interest](#area-of-interest-aoi) for details. The satellite imagery can be given to the pipeline using: @@ -92,7 +92,7 @@ The satellite imagery can be given to the pipeline using: --input '[path to imagery root]' ``` -The satellite imagery can also be provide as a tar archive. In this case it is mandatory to set `--input_tar` to true. Moreover, within the tar archive, the structure explained above has to be in place. In the example above `181036/` and `181035/` would need to be in the top level of the archive. +The satellite imagery can also be provide as a tar archive. In this case it is mandatory to set `--input_tar` to `true`. Moreover, within the tar archive, the structure explained above has to be in place. In the example above `181036/` and `181035/` would need to be in the top level of the archive. ### Digital Elevation Model (DEM) @@ -100,7 +100,7 @@ A DEM is necessary for topographic correction of Landsat data, and helps to dist The pipeline expects a path to the Digital Elevation Model root directory as a parameter. Concretely, the expected structure would look like this: -``` +```tree dem ├── .vrt └── / @@ -115,7 +115,7 @@ The DEM can be given to the pipeline using: --dem '[path to dem root]' ``` -The digital elevation model can also be provide as a tar archive. In this case it is mandatory to set `--dem_tar` to true. Moreover, within the tar archive, the structure explained above has to be in place. In the example above `.vrt` and `/` would need to be in the top level of the archive. +The digital elevation model can also be provide as a tar archive. In this case it is mandatory to set `--dem_tar` to `true`. Moreover, within the tar archive, the structure explained above has to be in place. In the example above `.vrt` and `/` would need to be in the top level of the archive. ### Water Vapor Database (WVDB) @@ -138,7 +138,7 @@ The WVDB can be given to the pipeline using: --wvdb '[path to wvdb dir]' ``` -The water vapor database can also be provide as a tar archive. In this case it is mandatory to set `--wvdb_tar` to true. All files of the wvdb would need to be in the top level of the archive. +The water vapor database can also be provide as a tar archive. In this case it is mandatory to set `--wvdb_tar` to `true`. All files of the wvdb would need to be in the top level of the archive. ### Datacube @@ -152,11 +152,9 @@ The datacube definition is passed as a single file using: ### Area of interest (AOI) - - The area of interest is a geospatial vector dataset that holds the boundary of the targeted area. -AOI is passed as a single using: +AOI is passed as a single file using: ```bash --aoi '[path to area of interest file]' @@ -168,7 +166,7 @@ For unmixing satellite-observed reflectance into sub-pixel fractions of land sur An example endmember definition (developed in [Hostert et al. 2003](https://www.sciencedirect.com/science/article/abs/pii/S0034425703001457)) looks like this: -``` +```tsv 320 730 2620 0 560 1450 3100 0 450 2240 3340 0 @@ -213,7 +211,7 @@ More details on available satellite identifiers can be found [here](https://forc Note that the identifiers specified for both processing levels have to match the data made available to the workflow. In other words, satellite data for e.g. Landsat 5 can't be processed if it was not supplied using the `input` parameter. -Both parameters can be passed as using: +Both parameters can be passed as follows: ```bash --sensors_level1 = '[preprocessing satellite identifier string]' @@ -232,7 +230,7 @@ A custom resolution can be passed using: --resolution '[integer]' ``` -The default value is 30, as most Landsat satellite natively provide this resolution. +The default value is `30`, as most Landsat satellite natively provide this resolution. ### Temporal extent @@ -245,11 +243,9 @@ Start and end date can be passed using: --end_date '[YYYY-MM-DD]' ``` -Default values are `'1984-01-01'` for the start date and `'2006-12-31'` for the end date. - ### Group size -The `group_size` parameters can be ignored in most cases. It defines how many satellite scenes are processed together. The parameters is used to balance the tradeoff between I/O and computational capacities on individual compute nodes. By default, `group_size` is set to 100. +The `group_size` parameters can be ignored in most cases. It defines how many satellite scenes are processed together. The parameters is used to balance the tradeoff between I/O and computational capacities on individual compute nodes. By default, `group_size` is set to `100`. The group size can be passed using: @@ -277,7 +273,7 @@ The time series stack output can be enabled using: ### Visualization -The workflow provides two types of results visualization and aggregation. The fine grained mosaic visualization contains all time series analyses results for all tiles in the original resolution. Pyramid visualizations present a broad overview of the same data but at a lower resolution. Both visualizations can be enabled or disabled using the parameters `mosaic_visualization` and `pyramid_visualization`. By default, both visualization methods are enabled. Note that the mosaic visualization is required to be enabled when using the `test` and `test_full` profiles to allow the pipeline to check the correctness of its results (this is the default behavior, make sure to not disable mosaic when using test profiles) . +The workflow provides two types of results visualization and aggregation. The fine grained mosaic visualization contains all time series analyses results for all tiles in the original resolution. Pyramid visualizations present a broad overview of the same data but at a lower resolution. Both visualizations can be enabled or disabled using the parameters `mosaic_visualization` and `pyramid_visualization`. By default, both visualization methods are enabled. Note that the mosaic visualization is required to be enabled when using the `test` and `test_full` profiles to allow the pipeline to check the correctness of its results. The visualizations can be enabled using: diff --git a/modules/local/check_results.nf b/modules/local/check_results.nf index cb57366..28cc76b 100644 --- a/modules/local/check_results.nf +++ b/modules/local/check_results.nf @@ -1,5 +1,3 @@ -nextflow.enable.dsl = 2 - process CHECK_RESULTS { label 'process_low' diff --git a/modules/local/check_results_full.nf b/modules/local/check_results_full.nf index c57175a..f47f6f8 100644 --- a/modules/local/check_results_full.nf +++ b/modules/local/check_results_full.nf @@ -1,5 +1,3 @@ -nextflow.enable.dsl = 2 - process CHECK_RESULTS_FULL { label 'process_low' diff --git a/modules/local/force-generate_analysis_mask.nf b/modules/local/force-generate_analysis_mask.nf index b5ee8b4..fa0f711 100644 --- a/modules/local/force-generate_analysis_mask.nf +++ b/modules/local/force-generate_analysis_mask.nf @@ -1,5 +1,3 @@ -nextflow.enable.dsl = 2 - process FORCE_GENERATE_ANALYSIS_MASK{ label 'process_single' diff --git a/modules/local/force-generate_tile_allow_list.nf b/modules/local/force-generate_tile_allow_list.nf index 4ea0e19..9f9ad5b 100644 --- a/modules/local/force-generate_tile_allow_list.nf +++ b/modules/local/force-generate_tile_allow_list.nf @@ -1,5 +1,3 @@ -nextflow.enable.dsl = 2 - process FORCE_GENERATE_TILE_ALLOW_LIST{ label 'process_single' diff --git a/modules/local/force-higher_level.nf b/modules/local/force-higher_level.nf index c91d9b4..0300564 100644 --- a/modules/local/force-higher_level.nf +++ b/modules/local/force-higher_level.nf @@ -1,5 +1,3 @@ -nextflow.enable.dsl = 2 - process FORCE_HIGHER_LEVEL { label 'process_medium' diff --git a/modules/local/force-mosaic.nf b/modules/local/force-mosaic.nf index 2465b07..aa37395 100644 --- a/modules/local/force-mosaic.nf +++ b/modules/local/force-mosaic.nf @@ -1,5 +1,3 @@ -nextflow.enable.dsl = 2 - process FORCE_MOSAIC{ label 'process_low' diff --git a/modules/local/force-preprocess.nf b/modules/local/force-preprocess.nf index c28af6a..dc740df 100644 --- a/modules/local/force-preprocess.nf +++ b/modules/local/force-preprocess.nf @@ -1,5 +1,3 @@ -nextflow.enable.dsl=2 - process FORCE_PREPROCESS { label 'process_medium' diff --git a/modules/local/force-pyramid.nf b/modules/local/force-pyramid.nf index e6eb9c6..4eca596 100644 --- a/modules/local/force-pyramid.nf +++ b/modules/local/force-pyramid.nf @@ -1,5 +1,3 @@ -nextflow.enable.dsl = 2 - process FORCE_PYRAMID { label 'process_low' diff --git a/modules/local/higher_level_force_config.nf b/modules/local/higher_level_force_config.nf index 43ffeef..d22ee7a 100644 --- a/modules/local/higher_level_force_config.nf +++ b/modules/local/higher_level_force_config.nf @@ -1,5 +1,3 @@ -nextflow.enable.dsl = 2 - process HIGHER_LEVEL_CONFIG { label 'process_single' diff --git a/modules/local/merge.nf b/modules/local/merge.nf index 55b0d52..0b8949c 100644 --- a/modules/local/merge.nf +++ b/modules/local/merge.nf @@ -1,5 +1,3 @@ -nextflow.enable.dsl = 2 - process MERGE { label 'process_low' diff --git a/modules/local/preprocess_force_config.nf b/modules/local/preprocess_force_config.nf index e759ac8..497966a 100644 --- a/modules/local/preprocess_force_config.nf +++ b/modules/local/preprocess_force_config.nf @@ -1,5 +1,3 @@ -nextflow.enable.dsl = 2 - process PREPROCESS_CONFIG { label 'process_single' diff --git a/nextflow.config b/nextflow.config index 4113199..25fda03 100644 --- a/nextflow.config +++ b/nextflow.config @@ -10,12 +10,12 @@ params { // Input options - input = null - dem = null - wvdb = null - data_cube = null - aoi = null - endmember = null + input = null + dem = null + wvdb = null + data_cube = null + aoi = null + endmember = null input_tar = false dem_tar = false @@ -29,7 +29,7 @@ params { end_date = "2006-12-31" // Workflow configuration - group_size = 100 + group_size = 100 // FORCE force_threads = 2 @@ -71,9 +71,9 @@ params { // Max resource options // Defaults only, expecting to be overwritten - max_memory = '128.GB' - max_cpus = 16 - max_time = '240.h' + max_memory = '128.GB' + max_cpus = 16 + max_time = '240.h' // Schema validation default options validationFailUnrecognisedParams = false diff --git a/nextflow_schema.json b/nextflow_schema.json index 60372db..0112fb5 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -15,45 +15,45 @@ "input": { "type": "string", "fa_icon": "fas fa-satellite", - "help_text": "Set this to the root directory of all satellite imagery. Directory structure should match format of data downloaded with '$ force-level1-csd\n' For concrete directory structure see ./docs/usage.md ", + "help_text": "Set this to the root directory of all satellite imagery. Directory structure should match format of data downloaded with '$ force-level1-csd\n' For concrete directory structure see [usage documentation](https://nf-co.re/rangeland/docs/usage)", "description": "Root directory of all sattelite imagery.", "mimetype": "application/x-tar" }, "input_tar": { "type": "boolean", "fa_icon": "fas fa-archive", - "description": "Indicates whether input is a tar archive.", - "help_text": "Set to true if input is a tar archive. The workflow will extract it then." + "description": "Indicates whether `input` is a tar archive.", + "help_text": "Set to `true` if `input` is a tar archive. The workflow will extract it then." }, "dem": { "type": "string", - "help_text": "Path to directory containing a subdirectory with tile-wise digital elevation files (.tif) and a virtual dataset file (.vrt file) comprising all tile-wise files from the subdirectory. \n\n\n", + "help_text": "Path to directory containing a subdirectory with tile-wise digital elevation files (`.tif`) and a virtual dataset file (`.vrt` file) comprising all tile-wise files from the subdirectory.", "fa_icon": "fas fa-mountain", "description": "Digital elevation model." }, "dem_tar": { "type": "boolean", "fa_icon": "fas fa-archive", - "description": "Indicates whether dem is a tar archive.", - "help_text": "Set to true if dem is a tar archive. The workflow will extract it then." + "description": "Indicates whether `dem` is a tar archive.", + "help_text": "Set to `true` if `dem` is a tar archive. The workflow will extract it then." }, "wvdb": { "type": "string", "fa_icon": "fas fa-burn", "description": "Water vapor dataset.", - "help_text": "Directory containg a number text files describing global water vapor data at different timestamps, and a coordinate order (.coo-)file containig the reference system of the water vapor data." + "help_text": "Directory containg a number text files describing global water vapor data at different timestamps, and a coordinate order (`.coo`-)file containig the reference system of the water vapor data." }, "wvdb_tar": { "type": "boolean", "fa_icon": "fas fa-archive", - "description": "Indicates whether wvdb is a tar archive.", - "help_text": "Set to true if wvdb is a tar archive. The workflow will extract it then." + "description": "Indicates whether `wvdb` is a tar archive.", + "help_text": "Set to `true` if `wvdb` is a tar archive. The workflow will extract it then." }, "data_cube": { "type": "string", "description": "Datacube definition.", "fa_icon": "fas fa-cube", - "help_text": "A single .prj file describing the projection and reference grid of the generated datacube." + "help_text": "A single `.prj` file describing the projection and reference grid of the generated datacube." }, "aoi": { "type": "string", @@ -65,7 +65,7 @@ "type": "string", "fa_icon": "fas fa-chart-line", "description": "Endmember definition.", - "help_text": "A single text file specifying where lines correspond to satellite bands and columns correspond to endmembers. Values correspond to reflectance values and are separated by spaces." + "help_text": "A single text file specifying where rows correspond to satellite bands and columns correspond to endmembers. Values correspond to reflectance values and are separated by spaces." }, "outdir": { "type": "string", diff --git a/subworkflows/local/higher_level.nf b/subworkflows/local/higher_level.nf index d1006ac..fb3bd3b 100644 --- a/subworkflows/local/higher_level.nf +++ b/subworkflows/local/higher_level.nf @@ -1,6 +1,3 @@ -nextflow.enable.dsl = 2 - -//inputs include { HIGHER_LEVEL_CONFIG } from '../../modules/local/higher_level_force_config.nf' include { FORCE_HIGHER_LEVEL } from '../../modules/local/force-higher_level.nf' include { FORCE_MOSAIC } from '../../modules/local/force-mosaic.nf' diff --git a/subworkflows/local/preprocessing.nf b/subworkflows/local/preprocessing.nf index 89766c0..98ce8eb 100644 --- a/subworkflows/local/preprocessing.nf +++ b/subworkflows/local/preprocessing.nf @@ -1,13 +1,10 @@ -nextflow.enable.dsl = 2 - -//includes include { FORCE_GENERATE_TILE_ALLOW_LIST } from '../../modules/local/force-generate_tile_allow_list' include { FORCE_GENERATE_ANALYSIS_MASK } from '../../modules/local/force-generate_analysis_mask' include { PREPROCESS_CONFIG } from '../../modules/local/preprocess_force_config' include { FORCE_PREPROCESS } from '../../modules/local/force-preprocess' include { MERGE as MERGE_BOA; MERGE as MERGE_QAI } from '../../modules/local/merge' -//Closure to extract the parent directory of a file +// Closure to extract the parent directory of a file def extractDirectory = { it.parent.toString().substring(it.parent.toString().lastIndexOf('/') + 1 ) } workflow PREPROCESSING { From 3dca3917cf953f5deddb6e90a1c505a0010651ce Mon Sep 17 00:00:00 2001 From: Felix Kummer Date: Thu, 8 Aug 2024 15:59:43 +0200 Subject: [PATCH 02/38] Added parameters to control publishing behavior for intermediate processing results, some minor adjustments in the docs. --- conf/modules.config | 9 +++++---- docs/output.md | 10 +++++----- docs/usage.md | 11 +++++++++++ nextflow.config | 2 ++ nextflow_schema.json | 12 ++++++++++++ 5 files changed, 35 insertions(+), 9 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index e63e00e..de1c7e4 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -45,8 +45,9 @@ process { ], [ path: { "${params.outdir}/preprocess/${task.tag}" }, - mode: 'symlink', - pattern: 'level2_ard/**/*' + mode: params.publish_dir_mode, + pattern: 'level2_ard/**/*', + saveAs: { params.save_ard ? it : null } ] ] } @@ -65,9 +66,9 @@ process { withName: "FORCE_HIGHER_LEVEL" { publishDir = [ path: { "${params.outdir}/higher-level/${task.tag}" }, - mode: 'symlink', + mode: params.publish_dir_mode, pattern: 'trend/*.tif', - saveAs: { "trend_files/${it.tokenize('/')[-1]}" } + saveAs: { params.save_ard ? "trend_files/${it.tokenize('/')[-1]}" : null } ] } diff --git a/docs/output.md b/docs/output.md index f4e86f3..c32f660 100644 --- a/docs/output.md +++ b/docs/output.md @@ -11,10 +11,10 @@ The directories listed below will be created in the results directory after the The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes data using the following steps: - [untar](#untar) - Optionally extract input files -- [Preparation](#preparation)- Create a masks and boundaries for further analyses. +- [Preparation](#preparation) - Create a masks and boundaries for further analyses. - [Preprocessing](#preprocessing) - Preprocessing of satellite imagery. - [Higher-level-Processing](#higher-level-processing) - Classify preprocessed imagery and perform time series analyses. -- [Visualization](#visualization). Create two visualizations of the results. +- [Visualization](#visualization) - Create two visualizations of the results. - [MultiQC](#multiqc) - Aggregate report describing results and QC from the whole pipeline - [Pipeline information](#pipeline-information) - Report metrics generated during the workflow execution @@ -67,7 +67,7 @@ Preprocessing consist of two parts, generating parameter files and actual prepro The parameter files created through [force-parameter](https://force-eo.readthedocs.io/en/latest/components/auxilliary/parameter.html#force-parameter) can be viewed to understand concrete preprocessing techniques applied for a given tile. -Logs and analysis-ready-data (ARD) are generated using the [force-l2ps](https://force-eo.readthedocs.io/en/latest/components/lower-level/level2/l2ps.html) command. Logs can be consulted for debugging purposes. ARD may be collected as a basis for other remote sensing workflows. Moreover, ARD contains two .tif files per initial input image, a quality data file and the atmospherically corrected satellite data, that can be viewed using geographic information systems (GISs). Note that ARD data is only published as symbolic links due to the amount and size of the files. +Logs and analysis-ready-data (ARD) are generated using the [force-l2ps](https://force-eo.readthedocs.io/en/latest/components/lower-level/level2/l2ps.html) command. Logs can be consulted for debugging purposes. ARD may be collected as a basis for other remote sensing workflows. The ARD in `level2_ard/` consist two `.tif` files per initial input image, a quality data file and the atmospherically corrected satellite data. Note that the `.tif` files are only published when the `save_ard` parameter is set to `true` to avoid bloating the memory. ### Higher-level-Processing @@ -84,11 +84,11 @@ Higher level processing consist of two parts, generating parameter files and per Parameter files may be consulted to derive information about the specific processing task performed for a given tile. In this workflow, classification using spectral unmixing is performed. -Spectral unmixing is a common technique to derive sub-pixel classification. Concretely, a set of endmember (provided using `--endmember`) is consulted to determine fractions of different types of vegetation, soil, ... for each pixel. +Spectral unmixing is a common technique to derive sub-pixel classification. Concretely, a set of endmember (provided using `--endmember`) is exploited to determine fractions of different types of vegetation, soil, ... for each pixel. Next, time series analysis for different vegetation characteristics is performed. -The resulting trend files can be consulted to view trends for individual tiles. They are saved as symlinks because of their large size. +The resulting trend files in `trend_files/` can be investigated to view trends for individual tiles. However, these files are only published if the `save_tsa` parameter is set to `true`. If the `return_tss` parameter was set to `true`, the pipeline will also output files with the `TSS` ending. These files contain the time series stack(TSS) for the given tile and index or band. Here, for each date of acquisition, an image is available that contains the values for that date. diff --git a/docs/usage.md b/docs/usage.md index 5413516..2c3c2a7 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -294,6 +294,17 @@ The number of threads can be passed using: The default value is 2. +### Intermediate data publishing + +By default, preprocessing and higher level processing steps do not publish the `.tif` files that they generate to avoid bloating the available memory. However, analysis-ready-data (aka. ARD or level-2 data) and the results of time series analyses (aka. level-3 data) maybe be interesting to certain users. The files for preprocessing and higher level processing can, therefore, be published by setting the `save_ard` and `save_tsa` to `true`, respectively. + +Publishing of intermediate data can be enabled using: + +```bash +save_ard = '[boolean]' +save_tsa = '[boolean]' +``` + ## Running the pipeline The typical command for running the pipeline is as follows: diff --git a/nextflow.config b/nextflow.config index 25fda03..6fc7994 100644 --- a/nextflow.config +++ b/nextflow.config @@ -30,6 +30,8 @@ params { // Workflow configuration group_size = 100 + save_ard = false + save_tsa = false // FORCE force_threads = 2 diff --git a/nextflow_schema.json b/nextflow_schema.json index 0112fb5..b80a19a 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -181,6 +181,18 @@ "description": "Parameters that configure workflow behavior not directly related to FORCE,", "default": "", "properties": { + "save_ard": { + "type": "boolean", + "fa_icon": "fas fa-database", + "description": "Whether analysis ready data should be published to the output directory.", + "help_text": "By default, the results of preprocessing (aka. analyses ready data or level-2 data) are not published. Setting this parameter to `true` enforces that these files are published to the output directory." + }, + "save_tsa": { + "type": "boolean", + "fa_icon": "fas fa-database", + "description": "Whether the results of time series analyses should be published to the output directory.", + "help_text": "By default, the results of higher level processing (aka. level-3 data) are not published. Setting this parameter to `true` enforces that these files are published to the output directory." + }, "group_size": { "type": "integer", "default": 100, From a5df347c9321b6322c8ce18cf135bc0aa96582f0 Mon Sep 17 00:00:00 2001 From: Felix Kummer Date: Thu, 8 Aug 2024 16:09:18 +0200 Subject: [PATCH 03/38] Added descriptions to custom scripts. --- bin/merge_boa.r | 3 +++ bin/merge_qai.r | 3 +++ bin/test.R | 2 ++ 3 files changed, 8 insertions(+) diff --git a/bin/merge_boa.r b/bin/merge_boa.r index 622ba08..0f4f40b 100755 --- a/bin/merge_boa.r +++ b/bin/merge_boa.r @@ -1,5 +1,8 @@ #!/usr/bin/env Rscript +# Script for merging bottom of atmosphere (boa) .tif raster files. +# This can improve the performance of downstream tasks. + require(raster) args = commandArgs(trailingOnly=TRUE) diff --git a/bin/merge_qai.r b/bin/merge_qai.r index 99f2cff..1ce1f9b 100755 --- a/bin/merge_qai.r +++ b/bin/merge_qai.r @@ -1,5 +1,8 @@ #!/usr/bin/env Rscript +# Script for merging quality information (qai) .tif raster files. +# This can improve the performance of downstream tasks. + require(raster) args = commandArgs(trailingOnly=TRUE) diff --git a/bin/test.R b/bin/test.R index 173cdbb..9ef2f50 100755 --- a/bin/test.R +++ b/bin/test.R @@ -1,5 +1,7 @@ #!/usr/bin/env Rscript +# Script to verify pipeline results from test and test_full profiles. + args = commandArgs(trailingOnly=TRUE) From 2e208fc6441f978e43787f1f6cd51f2279e33fef Mon Sep 17 00:00:00 2001 From: Felix Kummer Date: Wed, 21 Aug 2024 15:15:52 +0200 Subject: [PATCH 04/38] Applied more minor changes requested by the reviewers --- docs/output.md | 2 +- docs/usage.md | 12 ++++----- modules/local/check_results.nf | 1 - modules/local/check_results_full.nf | 1 - modules/local/force-generate_analysis_mask.nf | 1 - .../local/force-generate_tile_allow_list.nf | 1 - modules/local/force-higher_level.nf | 3 +-- modules/local/force-mosaic.nf | 3 +-- modules/local/force-preprocess.nf | 3 +-- modules/local/force-pyramid.nf | 3 +-- modules/local/higher_level_force_config.nf | 3 +-- modules/local/merge.nf | 3 +-- modules/local/preprocess_force_config.nf | 3 +-- nextflow_schema.json | 8 +++--- subworkflows/local/higher_level.nf | 3 --- subworkflows/local/preprocessing.nf | 2 +- workflows/rangeland.nf | 26 +++++++++---------- 17 files changed, 32 insertions(+), 46 deletions(-) diff --git a/docs/output.md b/docs/output.md index c32f660..b85caca 100644 --- a/docs/output.md +++ b/docs/output.md @@ -10,7 +10,7 @@ The directories listed below will be created in the results directory after the The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes data using the following steps: -- [untar](#untar) - Optionally extract input files +- [Untar](#untar) - Optionally extract input files - [Preparation](#preparation) - Create a masks and boundaries for further analyses. - [Preprocessing](#preprocessing) - Preprocessing of satellite imagery. - [Higher-level-Processing](#higher-level-processing) - Classify preprocessed imagery and perform time series analyses. diff --git a/docs/usage.md b/docs/usage.md index 2c3c2a7..e00b793 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -18,8 +18,8 @@ Satellite data should be given as a path to a common root of all imagery. This i ```tree root -├── 181035 -│ └── LE07_L1TP_181035_20061217_20170106_01_T1 +├── 181035 # path/row id +│ └── LE07_L1TP_181035_20061217_20170106_01_T1 # satellite, path/row id, date of acquisition, date of processing, product number, collection tier │ | ├── LE07_L1TP_181035_20061217_20170106_01_T1_ANG.txt │ | ├── LE07_L1TP_181035_20061217_20170106_01_T1_B1.TIF │ | ├── LE07_L1TP_181035_20061217_20170106_01_T1_B2.TIF @@ -34,8 +34,8 @@ root │ | ├── LE07_L1TP_181035_20061217_20170106_01_T1_GCP.txt │ | └── LE07_L1TP_181035_20061217_20170106_01_T1_MTL.txt | └── ... -├── 181036 -│ └── LE07_L1TP_181036_20061217_20170105_01_T1 +├── 181036 # path/row id +│ └── LE07_L1TP_181036_20061217_20170105_01_T1 # satellite, path/row id, date of acquisition, date of processing, product number, collection tier │ | ├── LE07_L1TP_181036_20061217_20170105_01_T1_ANG.txt │ | ├── LE07_L1TP_181036_20061217_20170105_01_T1_B1.TIF │ | ├── LE07_L1TP_181036_20061217_20170105_01_T1_B2.TIF @@ -75,7 +75,7 @@ On the lowest level of the structure, the actual data is stored. Looking at the All files within the lowest level of structure belong to a single observation. Files containing imagery (prefix starts with "B") should be `.tif` files. Files containing auxiliary data are text files. -This structure is automatically generated when [using force to download the data](https://force-eo.readthedocs.io/en/latest/components/lower-level/level1/level1-csd.html?). We strongly suggest users to download data using FORCE. For example, executing the following code (e.g. with [FORCE in docker](https://force-eo.readthedocs.io/en/latest/setup/docker.html)) will download data for Landsat 4,5 and 7, in the time range from 1st January 1984 until 31st December 2006, including pictures with up to 70 percent of cloud coverage: +This structure is automatically generated when [using FORCE to download the data](https://force-eo.readthedocs.io/en/latest/components/lower-level/level1/level1-csd.html?). We strongly suggest users to download data using FORCE. For example, executing the following code (e.g. with [FORCE in docker](https://force-eo.readthedocs.io/en/latest/setup/docker.html)) will download data for Landsat 4,5 and 7, in the time range from 1st January 1984 until 31st December 2006, including pictures with up to 70 percent of cloud coverage: ```bash mkdir -p meta @@ -222,7 +222,7 @@ Note that both parameters are optional and are by default set to: `"LT04,LT05,LE ### Resolution -Resolution of satellite imagery defines the real size of a single pixel. As an example, a resolution of 30 meters indicates that a single pixel in the data covers a 30x30 meters square of the earths surface. Users can customize the resolution that FORCE should assume. This does not necessarily have to match the resolution of the supplied data. FORCE will treat imagery as having the specified resolution. However, passing a resolution not matching the satellite data might lead to unexpected results. Resolution is specified in meters. +Resolution of satellite imagery defines the real size of a single pixel. As an example, a resolution of 30 meters indicates that a single pixel in the data covers a 30x30 meters square of the earth's surface. Users can customize the resolution that FORCE should assume. This does not necessarily have to match the resolution of the supplied data. FORCE will treat imagery as having the specified resolution. However, passing a resolution not matching the satellite data might lead to unexpected results. Resolution is specified in meters. A custom resolution can be passed using: diff --git a/modules/local/check_results.nf b/modules/local/check_results.nf index 28cc76b..4b1e14c 100644 --- a/modules/local/check_results.nf +++ b/modules/local/check_results.nf @@ -1,5 +1,4 @@ process CHECK_RESULTS { - label 'process_low' container 'docker.io/rocker/geospatial:4.3.1' diff --git a/modules/local/check_results_full.nf b/modules/local/check_results_full.nf index f47f6f8..a4c4898 100644 --- a/modules/local/check_results_full.nf +++ b/modules/local/check_results_full.nf @@ -1,5 +1,4 @@ process CHECK_RESULTS_FULL { - label 'process_low' container 'docker.io/rocker/geospatial:4.3.1' diff --git a/modules/local/force-generate_analysis_mask.nf b/modules/local/force-generate_analysis_mask.nf index fa0f711..b9297fe 100644 --- a/modules/local/force-generate_analysis_mask.nf +++ b/modules/local/force-generate_analysis_mask.nf @@ -1,5 +1,4 @@ process FORCE_GENERATE_ANALYSIS_MASK{ - label 'process_single' container "docker.io/davidfrantz/force:3.7.10" diff --git a/modules/local/force-generate_tile_allow_list.nf b/modules/local/force-generate_tile_allow_list.nf index 9f9ad5b..fa1210c 100644 --- a/modules/local/force-generate_tile_allow_list.nf +++ b/modules/local/force-generate_tile_allow_list.nf @@ -1,5 +1,4 @@ process FORCE_GENERATE_TILE_ALLOW_LIST{ - label 'process_single' container "docker.io/davidfrantz/force:3.7.10" diff --git a/modules/local/force-higher_level.nf b/modules/local/force-higher_level.nf index 0300564..9e91773 100644 --- a/modules/local/force-higher_level.nf +++ b/modules/local/force-higher_level.nf @@ -1,9 +1,8 @@ process FORCE_HIGHER_LEVEL { - + tag { tile } label 'process_medium' container "docker.io/davidfrantz/force:3.7.10" - tag { tile } input: tuple val(tile), path(config), path(ard), path(aoi), path (datacube), path (endmember) diff --git a/modules/local/force-mosaic.nf b/modules/local/force-mosaic.nf index aa37395..604df9b 100644 --- a/modules/local/force-mosaic.nf +++ b/modules/local/force-mosaic.nf @@ -1,8 +1,7 @@ process FORCE_MOSAIC{ - + tag { product } label 'process_low' - tag { product } container "docker.io/davidfrantz/force:3.7.10" input: diff --git a/modules/local/force-preprocess.nf b/modules/local/force-preprocess.nf index dc740df..75f5ae3 100644 --- a/modules/local/force-preprocess.nf +++ b/modules/local/force-preprocess.nf @@ -1,7 +1,6 @@ process FORCE_PREPROCESS { - - label 'process_medium' tag { data.simpleName } + label 'process_medium' container "docker.io/davidfrantz/force:3.7.10" diff --git a/modules/local/force-pyramid.nf b/modules/local/force-pyramid.nf index 4eca596..80d430c 100644 --- a/modules/local/force-pyramid.nf +++ b/modules/local/force-pyramid.nf @@ -1,7 +1,6 @@ process FORCE_PYRAMID { - - label 'process_low' tag { tile } + label 'process_low' container "docker.io/davidfrantz/force:3.7.10" diff --git a/modules/local/higher_level_force_config.nf b/modules/local/higher_level_force_config.nf index d22ee7a..afcadf4 100644 --- a/modules/local/higher_level_force_config.nf +++ b/modules/local/higher_level_force_config.nf @@ -1,7 +1,6 @@ process HIGHER_LEVEL_CONFIG { - - label 'process_single' tag { tile } + label 'process_single' container "docker.io/davidfrantz/force:3.7.10" diff --git a/modules/local/merge.nf b/modules/local/merge.nf index 0b8949c..3126637 100644 --- a/modules/local/merge.nf +++ b/modules/local/merge.nf @@ -1,7 +1,6 @@ process MERGE { - - label 'process_low' tag { id } + label 'process_low' container "docker.io/davidfrantz/force:3.7.10" diff --git a/modules/local/preprocess_force_config.nf b/modules/local/preprocess_force_config.nf index 497966a..850675c 100644 --- a/modules/local/preprocess_force_config.nf +++ b/modules/local/preprocess_force_config.nf @@ -1,7 +1,6 @@ process PREPROCESS_CONFIG { - - label 'process_single' tag { data.simpleName } + label 'process_single' container "docker.io/davidfrantz/force:3.7.10" diff --git a/nextflow_schema.json b/nextflow_schema.json index b80a19a..5c0464a 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -16,7 +16,7 @@ "type": "string", "fa_icon": "fas fa-satellite", "help_text": "Set this to the root directory of all satellite imagery. Directory structure should match format of data downloaded with '$ force-level1-csd\n' For concrete directory structure see [usage documentation](https://nf-co.re/rangeland/docs/usage)", - "description": "Root directory of all sattelite imagery.", + "description": "Root directory of all satellite imagery.", "mimetype": "application/x-tar" }, "input_tar": { @@ -41,7 +41,7 @@ "type": "string", "fa_icon": "fas fa-burn", "description": "Water vapor dataset.", - "help_text": "Directory containg a number text files describing global water vapor data at different timestamps, and a coordinate order (`.coo`-)file containig the reference system of the water vapor data." + "help_text": "Directory containing a number text files describing global water vapor data at different timestamps, and a coordinate order (`.coo`-)file containing the reference system of the water vapor data." }, "wvdb_tar": { "type": "boolean", @@ -59,7 +59,7 @@ "type": "string", "fa_icon": "fas fa-chart-area", "description": "Area of interest.", - "help_text": "A single vector file specifying the spacial extend of the targeted area." + "help_text": "A single vector file specifying the spatial extend of the targeted area." }, "endmember": { "type": "string", @@ -196,7 +196,7 @@ "group_size": { "type": "integer", "default": 100, - "description": "Batch size of tiles considered for merging.", + "description": "Batch size of tiles considered for merging.", "help_text": "Controls trade-off between parallelism and I/O load.\nHigher group_size -> More tiles merged in one process, less I/O load.\nLower group_size -> Less tiles merged in one process, more I/O load. ", "fa_icon": "fas fa-layer-group" } diff --git a/subworkflows/local/higher_level.nf b/subworkflows/local/higher_level.nf index fb3bd3b..d0bc922 100644 --- a/subworkflows/local/higher_level.nf +++ b/subworkflows/local/higher_level.nf @@ -22,7 +22,6 @@ workflow HIGHER_LEVEL { FORCE_HIGHER_LEVEL( HIGHER_LEVEL_CONFIG.out.higher_level_configs_and_data ) ch_versions = ch_versions.mix(FORCE_HIGHER_LEVEL.out.versions.first()) - trend_files = FORCE_HIGHER_LEVEL.out.trend_files.flatten().map{ x -> [ x.simpleName.substring(12), x ] } trend_files_mosaic = trend_files.groupTuple() @@ -42,7 +41,5 @@ workflow HIGHER_LEVEL { emit: mosaic_files - versions = ch_versions - } diff --git a/subworkflows/local/preprocessing.nf b/subworkflows/local/preprocessing.nf index 98ce8eb..453c1d8 100644 --- a/subworkflows/local/preprocessing.nf +++ b/subworkflows/local/preprocessing.nf @@ -48,6 +48,7 @@ workflow PREPROCESSING { .toSortedList{ a,b -> a[1][0].simpleName <=> b[1][0].simpleName } .flatMap{it} .groupTuple( remainder : true, size : params.group_size ).map{ [ it[0], it[1] .flatten() ] } + qai_tiles_to_merge = qai_tiles.filter{ x -> x[1].size() > 1 } .map{ [ it[0].substring( 0, 11 ), it[1] ] } //Sort to ensure the same groups if you use resume @@ -76,5 +77,4 @@ workflow PREPROCESSING { emit: tiles_and_masks = boa_tiles.join( qai_tiles ).join( masks ) versions = ch_versions - } diff --git a/workflows/rangeland.nf b/workflows/rangeland.nf index 08cda4d..dd01dfd 100644 --- a/workflows/rangeland.nf +++ b/workflows/rangeland.nf @@ -46,7 +46,7 @@ include { UNTAR as UNTAR_INPUT; UNTAR as UNTAR_DEM; UNTAR as UNTAR_WVDB; UNTAR a */ -// check wether provided input is within provided time range +// check whether provided input is within provided time range def inRegion = input -> { Integer date = input.simpleName.split("_")[3] as Integer Integer start = params.start_date.replace('-','') as Integer @@ -75,9 +75,9 @@ workflow RANGELAND { data = null dem = null wvdb = null - cube_file = file( "$params.data_cube" ) - aoi_file = file( "$params.aoi" ) - endmember_file = file( "$params.endmember" ) + cube_file = file( params.data_cube ) + aoi_file = file( params.aoi ) + endmember_file = file( params.endmember ) // // MODULE: untar @@ -88,12 +88,12 @@ workflow RANGELAND { base_path = UNTAR_INPUT.out.untar.map(it -> it[1]) data = base_path.map(it -> file("$it/*/*", type: 'dir')).flatten() - data = data.flatten().filter{ inRegion(it) } + data = data.filter{ inRegion(it) } tar_versions = tar_versions.mix(UNTAR_INPUT.out.versions) } else { - data = Channel.fromPath( "${params.input}/*/*", type: 'dir') .flatten() - data = data.flatten().filter{ inRegion(it) } + data = Channel.fromPath( "${params.input}/*/*", type: 'dir').flatten() + data = data.filter{ inRegion(it) } } if (params.dem_tar) { @@ -133,12 +133,12 @@ workflow RANGELAND { // MODULE: Check results // if (params.config_profile_name == 'Test profile') { - woody_change_ref = file("$params.woody_change_ref") - woody_yoc_ref = file("$params.woody_yoc_ref") - herbaceous_change_ref = file("$params.herbaceous_change_ref") - herbaceous_yoc_ref = file("$params.herbaceous_yoc_ref") - peak_change_ref = file("$params.peak_change_ref") - peak_yoc_ref = file("$params.peak_yoc_ref") + woody_change_ref = file( params.woody_change_ref ) + woody_yoc_ref = file( params.woody_yoc_ref ) + herbaceous_change_ref = file( params.herbaceous_change_ref ) + herbaceous_yoc_ref = file( params.herbaceous_yoc_ref ) + peak_change_ref = file( params.peak_change_ref ) + peak_yoc_ref = file( params.peak_yoc_ref ) CHECK_RESULTS(grouped_trend_data, woody_change_ref, woody_yoc_ref, herbaceous_change_ref, herbaceous_yoc_ref, peak_change_ref, peak_yoc_ref) ch_versions = ch_versions.mix(CHECK_RESULTS.out.versions) From e5d44259781d7382a48e0f6ea74e20cf57943134 Mon Sep 17 00:00:00 2001 From: Felix Kummer Date: Fri, 23 Aug 2024 09:29:22 +0200 Subject: [PATCH 05/38] Reworked merge scripts --- bin/merge_boa.r | 61 +++++++++++++++++++++++-------------------------- bin/merge_qai.r | 50 +++++++++++++++++++--------------------- 2 files changed, 53 insertions(+), 58 deletions(-) diff --git a/bin/merge_boa.r b/bin/merge_boa.r index 0f4f40b..7a488b4 100755 --- a/bin/merge_boa.r +++ b/bin/merge_boa.r @@ -3,44 +3,41 @@ # Script for merging bottom of atmosphere (boa) .tif raster files. # This can improve the performance of downstream tasks. -require(raster) +require(terra) -args = commandArgs(trailingOnly=TRUE) +args <- commandArgs(trailingOnly = TRUE) if (length(args) < 3) { - stop("\nthis program needs at least 3 inputs\n1: output filename\n2-*: input files", call.=FALSE) + stop("\nError: this program needs at least 3 inputs\n1: output filename\n2-*: input files", call.=FALSE) } fout <- args[1] finp <- args[2:length(args)] -nf <- length(finp) -img <- brick(finp[1]) -nc <- ncell(img) -nb <- nbands(img) - - -sum <- matrix(0, nc, nb) -num <- matrix(0, nc, nb) - -for (i in 1:nf){ - - data <- brick(finp[i])[] - - num <- num + !is.na(data) - - data[is.na(data)] <- 0 - sum <- sum + data - -} - -mean <- sum/num -img[] <- mean - - -writeRaster(img, filename = fout, format = "GTiff", datatype = "INT2S", - options = c("INTERLEAVE=BAND", "COMPRESS=LZW", "PREDICTOR=2", - "NUM_THREADS=ALL_CPUS", "BIGTIFF=YES", - sprintf("BLOCKXSIZE=%s", img@file@blockcols[1]), - sprintf("BLOCKYSIZE=%s", img@file@blockrows[1]))) +# Load input rasters +rasters <- lapply(finp, rast) + +# Calculate the sum of non-NA values across all rasters +sum_rasters <- Reduce("+", lapply(rasters, function(x) { + x[is.na(x)] <- 0 + return(x) +})) + +# Calculate the number of values non-NA values for each cell +count_rasters <- Reduce("+", lapply(rasters, function(x) { + return(!is.na(x)) +})) + +# Calculate the mean raster +mean_raster <- sum_rasters / count_rasters + +# Write the mean raster +writeRaster(mean_raster, + filename = fout, + datatype = "INT2S", + filetype = "GTiff", + gdal = c("COMPRESS=LZW", "PREDICTOR=2", + "NUM_THREADS=ALL_CPUS", "BIGTIFF=YES", + sprintf("BLOCKXSIZE=%s", ncol(mean_raster)), + sprintf("BLOCKYSIZE=%s", nrow(mean_raster)))) diff --git a/bin/merge_qai.r b/bin/merge_qai.r index 1ce1f9b..a35131a 100755 --- a/bin/merge_qai.r +++ b/bin/merge_qai.r @@ -3,38 +3,36 @@ # Script for merging quality information (qai) .tif raster files. # This can improve the performance of downstream tasks. -require(raster) +require(terra) -args = commandArgs(trailingOnly=TRUE) +args <- commandArgs(trailingOnly = TRUE) if (length(args) < 3) { - stop("\nthis program needs at least 3 inputs\n1: output filename\n2-*: input files", call.=FALSE) + stop("\nError: this program needs at least 3 inputs\n1: output filename\n2-*: input files", call.=FALSE) } fout <- args[1] finp <- args[2:length(args)] -nf <- length(finp) -img <- raster(finp[1]) -nc <- ncell(img) - - -last <- rep(1, nc) - -for (i in 1:nf){ - - data <- raster(finp[i])[] - - last[!is.na(data)] <- data[!is.na(data)] - -} - -img[] <- last - - -writeRaster(img, filename = fout, format = "GTiff", datatype = "INT2S", - options = c("INTERLEAVE=BAND", "COMPRESS=LZW", "PREDICTOR=2", - "NUM_THREADS=ALL_CPUS", "BIGTIFF=YES", - sprintf("BLOCKXSIZE=%s", img@file@blockcols[1]), - sprintf("BLOCKYSIZE=%s", img@file@blockrows[1]))) +# load raster files into single SpatRaster +rasters <- rast(finp) + +# Merge rasters by maintaining the last non-NA value +merged_raster <- app(rasters, function(x) { + non_na_values <- na.omit(x) + if (length(non_na_values) == 0) { + return(1) + } + return(tail(non_na_values, 1)[1]) +}) + +# Write merged raster +writeRaster(merged_raster, + filename = fout, + filetype = "GTiff", + datatype = "INT2S", + gdal = c("INTERLEAVE=BAND", "COMPRESS=LZW", "PREDICTOR=2", + "NUM_THREADS=ALL_CPUS", "BIGTIFF=YES", + sprintf("BLOCKXSIZE=%s", ncol(merged_raster)), + sprintf("BLOCKYSIZE=%s", nrow(merged_raster)))) From fd29a4bf1a0ebd8a5c70865e67cd8c108dedef59 Mon Sep 17 00:00:00 2001 From: Felix Kummer Date: Fri, 23 Aug 2024 09:49:34 +0200 Subject: [PATCH 06/38] Added authors and licenses to scripts --- bin/merge_boa.r | 3 +++ bin/merge_qai.r | 3 +++ bin/test.R | 3 +++ 3 files changed, 9 insertions(+) diff --git a/bin/merge_boa.r b/bin/merge_boa.r index 7a488b4..318164f 100755 --- a/bin/merge_boa.r +++ b/bin/merge_boa.r @@ -1,5 +1,8 @@ #!/usr/bin/env Rscript +## Originally written by Felix Kummer and released under the MIT license. +## See git repository (https://github.com/nf-core/rangeland) for full license text. + # Script for merging bottom of atmosphere (boa) .tif raster files. # This can improve the performance of downstream tasks. diff --git a/bin/merge_qai.r b/bin/merge_qai.r index a35131a..8515063 100755 --- a/bin/merge_qai.r +++ b/bin/merge_qai.r @@ -1,5 +1,8 @@ #!/usr/bin/env Rscript +## Originally written by Felix Kummer and released under the MIT license. +## See git repository (https://github.com/nf-core/rangeland) for full license text. + # Script for merging quality information (qai) .tif raster files. # This can improve the performance of downstream tasks. diff --git a/bin/test.R b/bin/test.R index 9ef2f50..298b023 100755 --- a/bin/test.R +++ b/bin/test.R @@ -1,5 +1,8 @@ #!/usr/bin/env Rscript +## Originally written by David Frantz and Felix Kummer and released under the MIT license. +## See git repository (https://github.com/nf-core/rangeland) for full license text. + # Script to verify pipeline results from test and test_full profiles. args = commandArgs(trailingOnly=TRUE) From e042a1c9d9bbac111d5603f99874898ba2d854ce Mon Sep 17 00:00:00 2001 From: Felix Kummer Date: Fri, 23 Aug 2024 10:06:31 +0200 Subject: [PATCH 07/38] Removed unused sensors_level1 parameter --- conf/test.config | 1 - conf/test_full.config | 1 - docs/usage.md | 20 ++++---------------- nextflow.config | 1 - nextflow_schema.json | 7 ------- 5 files changed, 4 insertions(+), 26 deletions(-) diff --git a/conf/test.config b/conf/test.config index 6b6e679..8b5506f 100644 --- a/conf/test.config +++ b/conf/test.config @@ -36,7 +36,6 @@ params { start_date = '1987-01-01' end_date = '1989-12-31' - sensors_level1 = 'LT04,LT05' sensors_level2 = 'LND04 LND05' // Reference data diff --git a/conf/test_full.config b/conf/test_full.config index 907fdf8..b963c70 100644 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -32,7 +32,6 @@ params { start_date = '1986-01-01' end_date = '1989-12-31' - sensors_level1 = 'LT04,LT05' sensors_level2 = 'LND04 LND05' // enable time series stack output diff --git a/docs/usage.md b/docs/usage.md index e00b793..99f6bd1 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -189,18 +189,7 @@ Users can specify additional parameters to configure how the underlying workflow ### Sensor Levels -Data from different satellites can be processed within this workflow. Users may wish to include different satellites in preprocessing and in higher level processing. To control this behavior, two parameters can be set when the pipeline is launched. -The first parameter - `sensors_level1` - controls the selection of satellites for preprocessing. This parameter should follow the FORCE notation for level 1 processing of satellites. Concretely, a string containing comma-separated satellite identifiers has to be supplied (e.g. `"LT04,LT05"` to include Landsat 4 and 5). Available options for satellite identifiers are: - -- `"LT04"`: Landsat 4 TM -- `"LT05"`: Landsat 5 TM -- `"LE07"`: Landsat 7 ETM+ -- `"LC08"`: Landsat 8 OLI -- `"S2A"`: Sentinel-2A MSI -- `"S2B"`: Sentinel-2B MSI - -The second parameter - `sensors_level2` - controls the selection of satellites for the higher level processing steps. The parameter has to follow the FORCE notation for level 2 processing. In particular, a string containing space-separated satellite identifiers has to be supplied (e.g. `"LND04 LND05"` to include Landsat 4 and 5). Note that these identifiers differ from those used for the `sensors_level1` parameter. -More details on available satellite identifiers can be found [here](https://force-eo.readthedocs.io/en/latest/components/higher-level/tsa/param.html), some common options include: +Data from different satellites can be processed within this workflow. Users may wish to include different satellites in preprocessing and in higher level processing. All input imagery is preprocessed. The `sensors_level2` parameter controls the selection of satellites for the higher level processing steps. The parameter has to follow the FORCE notation for level 2 processing. In particular, a string containing space-separated satellite identifiers has to be supplied (e.g. `"LND04 LND05"` to include Landsat 4 and 5). More details on available satellite identifiers can be found [here](https://force-eo.readthedocs.io/en/latest/components/higher-level/tsa/param.html), some common options include: - `"LND04"`: 6-band Landsat 4 TM - `"LND05"`: 6-band Landsat 5 TM @@ -209,16 +198,15 @@ More details on available satellite identifiers can be found [here](https://forc - `"SEN2A"`: 10-band Sentinel-2A - `"SEN2B"`: 10-band Sentinel-2B -Note that the identifiers specified for both processing levels have to match the data made available to the workflow. In other words, satellite data for e.g. Landsat 5 can't be processed if it was not supplied using the `input` parameter. +Note that the specified identifiers have to match the data made available to the workflow. In other words, satellite data for e.g. Landsat 5 can't be processed if it was not supplied using the `input` parameter. -Both parameters can be passed as follows: +The satellite identifiers can be passed as follows: ```bash ---sensors_level1 = '[preprocessing satellite identifier string]' --sensors_level2 = '[higher level processing satellite identifier string]' ``` -Note that both parameters are optional and are by default set to: `"LT04,LT05,LE07,S2A"` and `"LND04 LND05 LND07"`. Therefore, by default, the pipeline will use Landsat 4,5,7, and Sentinel 2 for preprocessing, while using Landsat 4,5 and 7 for higher level processing. +Note that the parameter is optional and the default value is: `"LND04 LND05 LND07"`. Therefore, by default, the pipeline will use Landsat 4,5 and 7 imagery in higher level processing. ### Resolution diff --git a/nextflow.config b/nextflow.config index 6fc7994..2aacdca 100644 --- a/nextflow.config +++ b/nextflow.config @@ -22,7 +22,6 @@ params { wvdb_tar = false // Remote sensing imagery parameters - sensors_level1 = "LT04,LT05,LE07,S2A" sensors_level2 = "LND04 LND05 LND07" resolution = 30 start_date = "1984-01-01" diff --git a/nextflow_schema.json b/nextflow_schema.json index 5c0464a..4fb0b6d 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -94,13 +94,6 @@ "default": "", "help_text": "These parameters are used to tell pipeline tools which data is expected, how this data has to be incorporated, and which parts of the imagery can be excluded (e.g. due to temporal mismatch). These parameters should be closely aligned with the provided input data.", "properties": { - "sensors_level1": { - "type": "string", - "default": "LT04,LT05,LE07,S2A", - "fa_icon": "fas fa-satellite", - "description": "Satellites for which first level data should be processed.", - "help_text": "String containing comma-separated indicators of satellites in FORCE level 1format. Possible options: \n\"LT04\": Landsat 4 TM, \n\"LT05\": Landsat 5 TM, \n\"LE07\": Landsat 7 ETM+,\n\"LC08\": Landsat 8 OLI,\n\"S2A\": Sentinel-2A MSI,\n\"S2B\": Sentinel-2B MSI" - }, "sensors_level2": { "type": "string", "default": "LND04 LND05 LND07", From 69fd4937ac94fd990383642bea430bcdc37c5c6c Mon Sep 17 00:00:00 2001 From: Felix Kummer Date: Wed, 28 Aug 2024 16:57:41 +0200 Subject: [PATCH 08/38] Applied one-sentence-per-line-scheme in .md files --- README.md | 19 +++-- docs/output.md | 70 ++++++++++++++----- docs/usage.md | 184 ++++++++++++++++++++++++++++++++++++------------- 3 files changed, 201 insertions(+), 72 deletions(-) diff --git a/README.md b/README.md index a95323f..8630c00 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,8 @@ ## Introduction -**nf-core/rangeland** is a geographical best-practice analysis pipeline for remotely sensed imagery. The pipeline processes satellite imagery alongside auxiliary data in multiple steps to arrive at a set of trend files related to land-cover changes. The main pipeline steps are: +**nf-core/rangeland** is a geographical best-practice analysis pipeline for remotely sensed imagery. +The pipeline processes satellite imagery alongside auxiliary data in multiple steps to arrive at a set of trend files related to land-cover changes. The main pipeline steps are: 1. Read satellite imagery, digital elevation model, endmember definition, water vapor database and area of interest definition 2. Generate allow list and analysis mask to determine which pixels from the satellite data can be used @@ -33,9 +34,12 @@ ## Usage > [!NOTE] -> If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how to set-up Nextflow. Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) with `-profile test` before running the workflow on actual data. +> If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how to set-up Nextflow. +> Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) with `-profile test` before running the workflow on actual data. -To run the pipeline on real data, input data needs to be acquired. Concretely, satellite imagery, water vapor data, a digital elevation model, endmember definitions, a datacube specification, and a area-of-interest specification are required. Please refer to the [usage documentation](https://nf-co.re/rangeland/usage) for details on the input structure. +To run the pipeline on real data, input data needs to be acquired. +Concretely, satellite imagery, water vapor data, a digital elevation model, endmember definitions, a datacube specification, and a area-of-interest specification are required. +Please refer to the [usage documentation](https://nf-co.re/rangeland/usage) for details on the input structure. Now, you can run the pipeline using: @@ -52,7 +56,8 @@ nextflow run nf-core/rangeland \ ``` > [!WARNING] -> Please provide pipeline parameters via the CLI or Nextflow `-params-file` option. Custom config files including those provided by the `-c` Nextflow option can be used to provide any configuration _**except for parameters**_; +> Please provide pipeline parameters via the CLI or Nextflow `-params-file` option. +> Custom config files including those provided by the `-c` Nextflow option can be used to provide any configuration _**except for parameters**_; > see [docs](https://nf-co.re/usage/configuration#custom-configuration-files). For more details and further functionality, please refer to the [usage documentation](https://nf-co.re/rangeland/usage) and the [parameter documentation](https://nf-co.re/rangeland/parameters). @@ -72,7 +77,8 @@ The rangeland workflow was originally written by: The original workflow can be found on [github](https://github.com/CRC-FONDA/FORCE2NXF-Rangeland). -Transformation to nf-core/rangeland was conducted by [Felix Kummer](https://github.com/Felix-Kummer). nf-core alignment started on the [nf-core branch of the original repository](https://github.com/CRC-FONDA/FORCE2NXF-Rangeland/tree/nf-core). +Transformation to nf-core/rangeland was conducted by [Felix Kummer](https://github.com/Felix-Kummer). +nf-core alignment started on the [nf-core branch of the original repository](https://github.com/CRC-FONDA/FORCE2NXF-Rangeland/tree/nf-core). We thank the following people for their extensive assistance in the development of this pipeline: @@ -114,7 +120,8 @@ You can cite the `nf-core` publication as follows: > > _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x). -This pipeline is based one the publication listed below. The publication can be cited as follows: +This pipeline is based one the publication listed below. +The publication can be cited as follows: > **FORCE on Nextflow: Scalable Analysis of Earth Observation Data on Commodity Clusters** > diff --git a/docs/output.md b/docs/output.md index b85caca..b13b1d0 100644 --- a/docs/output.md +++ b/docs/output.md @@ -4,7 +4,8 @@ This document describes the output produced by the pipeline. -The directories listed below will be created in the results directory after the pipeline has finished. All paths are relative to the top-level results directory. +The directories listed below will be created in the results directory after the pipeline has finished. +All paths are relative to the top-level results directory. ## Pipeline overview @@ -24,15 +25,22 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d Output files - `untar/` - - ``: directory containing symlinks to decompressed digital elevation input data. Only present if a tar archive was provided for the digital elevation model. Name of the directory derived from archive contents. - - ``: directory containing symlinks to decompressed water vapor input data. Only present if a tar archive was provided for water vapor data. Name of the directory derived from archive contents. - - ``: directory containing symlinks to decompressed satellite imagery input data. Only present if a tar archive was provided for satellite data. Name of the directory derived from archive contents. + - ``: directory containing symlinks to decompressed digital elevation input data. + Only present if a tar archive was provided for the digital elevation model. + Name of the directory derived from archive contents. + - ``: directory containing symlinks to decompressed water vapor input data. + Only present if a tar archive was provided for water vapor data. + Name of the directory derived from archive contents. + - ``: directory containing symlinks to decompressed satellite imagery input data. + Only present if a tar archive was provided for satellite data. + Name of the directory derived from archive contents. [untar](https://nf-co.re/modules/untar) is a nf-core module used to extract files from tar archives. -Invokation of untar depends on certain parameters (i.e `input_tar`, `dem_tar` and `wvdb_tar`). Thus, the outputs files are only generated when these are set to `true`. +Invokation of untar depends on certain parameters (i.e `input_tar`, `dem_tar` and `wvdb_tar`). +Thus, the outputs files are only generated when these are set to `true`. ### Preparation @@ -40,16 +48,23 @@ Invokation of untar depends on certain parameters (i.e `input_tar`, `dem_tar` an Output files - `preparation/` - - `tile_allow.txt`: File containing all [FORCE](https://force-eo.readthedocs.io/en/latest/index.html) notation tiles of the earths surface that should be used further in the pipeline. The first line contains the number of tiles. Following lines contain tile identifiers. - - `mask/`: Directory containing a subdirectory for every [FORCE](https://force-eo.readthedocs.io/en/latest/index.html) tile. Each subdirectory contains the `aoi.tif` file. This file represents a binary mask layer that indicates which pixels are eligible for analyses. + - `tile_allow.txt`: File containing all [FORCE](https://force-eo.readthedocs.io/en/latest/index.html) notation tiles of the earths surface that should be used further in the pipeline. + The first line contains the number of tiles. + Following lines contain tile identifiers. + - `mask/`: Directory containing a subdirectory for every [FORCE](https://force-eo.readthedocs.io/en/latest/index.html) tile. + Each subdirectory contains the `aoi.tif` file. + This file represents a binary mask layer that indicates which pixels are eligible for analyses. In the preparation step, usable tiles and pixels per tile are identified. -[force-tile-extent](https://force-eo.readthedocs.io/en/latest/components/auxilliary/tile-extent.html#force-tile-extent) analyses the area of interest information and determines the tiles that can be used. These tiles are later used by other [FORCE](https://force-eo.readthedocs.io/en/latest/index.html) submodules. +[force-tile-extent](https://force-eo.readthedocs.io/en/latest/components/auxilliary/tile-extent.html#force-tile-extent) analyses the area of interest information and determines the tiles that can be used. +These tiles are later used by other [FORCE](https://force-eo.readthedocs.io/en/latest/index.html) submodules. -[force-cube](https://force-eo.readthedocs.io/en/latest/components/auxilliary/cube.html#force-cube) computes the usable pixels for each [FORCE](https://force-eo.readthedocs.io/en/latest/index.html) tile. This computation is based on the specified are of interest and the resolution. The resulting binary masks can be used to understand which pixels were discarded (e.g. because they only contain water). +[force-cube](https://force-eo.readthedocs.io/en/latest/components/auxilliary/cube.html#force-cube) computes the usable pixels for each [FORCE](https://force-eo.readthedocs.io/en/latest/index.html) tile. +This computation is based on the specified are of interest and the resolution. +The resulting binary masks can be used to understand which pixels were discarded (e.g. because they only contain water). ### Preprocessing @@ -58,7 +73,8 @@ In the preparation step, usable tiles and pixels per tile are identified. - `preprocess//` - `param_files/`: Directory containing parameter files for [FORCE](https://force-eo.readthedocs.io/en/latest/index.html) preprocessing modules. One file per satellite mission per tile. - - `level2_ard/`: Directory containing symlinks to analysis-ready-data. Subdirectories contain the .tif files that were generated during preprocessing. + - `level2_ard/`: Directory containing symlinks to analysis-ready-data. + Subdirectories contain the .tif files that were generated during preprocessing. - `logs/`: Logs from preprocessing. @@ -67,7 +83,11 @@ Preprocessing consist of two parts, generating parameter files and actual prepro The parameter files created through [force-parameter](https://force-eo.readthedocs.io/en/latest/components/auxilliary/parameter.html#force-parameter) can be viewed to understand concrete preprocessing techniques applied for a given tile. -Logs and analysis-ready-data (ARD) are generated using the [force-l2ps](https://force-eo.readthedocs.io/en/latest/components/lower-level/level2/l2ps.html) command. Logs can be consulted for debugging purposes. ARD may be collected as a basis for other remote sensing workflows. The ARD in `level2_ard/` consist two `.tif` files per initial input image, a quality data file and the atmospherically corrected satellite data. Note that the `.tif` files are only published when the `save_ard` parameter is set to `true` to avoid bloating the memory. +Logs and analysis-ready-data (ARD) are generated using the [force-l2ps](https://force-eo.readthedocs.io/en/latest/components/lower-level/level2/l2ps.html) command. +Logs can be consulted for debugging purposes. +ARD may be collected as a basis for other remote sensing workflows. +The ARD in `level2_ard/` consist two `.tif` files per initial input image, a quality data file and the atmospherically corrected satellite data. +Note that the `.tif` files are only published when the `save_ard` parameter is set to `true` to avoid bloating the storage. ### Higher-level-Processing @@ -82,15 +102,20 @@ Logs and analysis-ready-data (ARD) are generated using the [force-l2ps](https:// Higher level processing consist of two parts, generating parameter files and performing various processing task as defined in the parameter files. -Parameter files may be consulted to derive information about the specific processing task performed for a given tile. In this workflow, classification using spectral unmixing is performed. +Parameter files may be consulted to derive information about the specific processing task performed for a given tile. +In this workflow, classification using spectral unmixing is performed. -Spectral unmixing is a common technique to derive sub-pixel classification. Concretely, a set of endmember (provided using `--endmember`) is exploited to determine fractions of different types of vegetation, soil, ... for each pixel. +Spectral unmixing is a common technique to derive sub-pixel classification. +Concretely, a set of endmember (provided using `--endmember`) is exploited to determine fractions of different types of vegetation, soil, ... for each pixel. Next, time series analysis for different vegetation characteristics is performed. -The resulting trend files in `trend_files/` can be investigated to view trends for individual tiles. However, these files are only published if the `save_tsa` parameter is set to `true`. +The resulting trend files in `trend_files/` can be investigated to view trends for individual tiles. +However, these files are only published if the `save_tsa` parameter is set to `true`. -If the `return_tss` parameter was set to `true`, the pipeline will also output files with the `TSS` ending. These files contain the time series stack(TSS) for the given tile and index or band. Here, for each date of acquisition, an image is available that contains the values for that date. +If the `return_tss` parameter was set to `true`, the pipeline will also output files with the `TSS` ending. +These files contain the time series stack(TSS) for the given tile and index or band. +Here, for each date of acquisition, an image is available that contains the values for that date. ### Visualization @@ -105,7 +130,11 @@ If the `return_tss` parameter was set to `true`, the pipeline will also output f -Two types of common visualizations are generated in the last step of the pipeline. They are results of [force-mosaic](https://force-eo.readthedocs.io/en/latest/components/auxilliary/mosaic.html) and [force-pyramid](https://force-eo.readthedocs.io/en/latest/components/auxilliary/pyramid.html). Note that these visualizations do not add more logic to the workflow but rather rearrange the output files of higher-level-processing. Both visualizations are enabled by default but may be disabled in a certain configuration files. Thus, these outputs are optional. +Two types of common visualizations are generated in the last step of the pipeline. +They are results of [force-mosaic](https://force-eo.readthedocs.io/en/latest/components/auxilliary/mosaic.html) and [force-pyramid](https://force-eo.readthedocs.io/en/latest/components/auxilliary/pyramid.html). +Note that these visualizations do not add more logic to the workflow but rather rearrange the output files of higher-level-processing. +Both visualizations are enabled by default but may be disabled in a certain configuration files. +Thus, these outputs are optional. ### MultiQC @@ -119,9 +148,11 @@ Two types of common visualizations are generated in the last step of the pipelin -[MultiQC](http://multiqc.info) is a visualization tool that generates a single HTML report summarising all samples in your project. Most of the pipeline QC results are visualised in the report and further statistics are available in the report data directory. +[MultiQC](http://multiqc.info) is a visualization tool that generates a single HTML report summarising all samples in your project. +Most of the pipeline QC results are visualised in the report and further statistics are available in the report data directory. -Results generated by MultiQC collate pipeline QC from supported tools. The pipeline has special steps which also allow the software versions to be reported in the MultiQC output for future traceability. For more information about how to use MultiQC reports, see . +Results generated by MultiQC collate pipeline QC from supported tools. The pipeline has special steps which also allow the software versions to be reported in the MultiQC output for future traceability. +For more information about how to use MultiQC reports, see . ### Pipeline information @@ -136,4 +167,5 @@ Results generated by MultiQC collate pipeline QC from supported tools. The pipel -[Nextflow](https://www.nextflow.io/docs/latest/tracing.html) provides excellent functionality for generating various reports relevant to the running and execution of the pipeline. This will allow you to troubleshoot errors with the running of the pipeline, and also provide you with other information such as launch commands, run times and resource usage. +[Nextflow](https://www.nextflow.io/docs/latest/tracing.html) provides excellent functionality for generating various reports relevant to the running and execution of the pipeline. +This will allow you to troubleshoot errors with the running of the pipeline, and also provide you with other information such as launch commands, run times and resource usage. diff --git a/docs/usage.md b/docs/usage.md index 99f6bd1..074b9ae 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -6,15 +6,20 @@ ## Input -As most remote sensing workflows, this pipeline relies on numerous sources of data. In the following we will describe the required data and corresponding formats. Mandatory input data consists of satellite data, a digital elevation model, a water vapor database, a data_cube, an area-of-interest specification and an endmember definition. +As most remote sensing workflows, this pipeline relies on numerous sources of data. +In the following we will describe the required data and corresponding formats. +Mandatory input data consists of satellite data, a digital elevation model, a water vapor database, a data_cube, an area-of-interest specification and an endmember definition. ### Satellite data -This pipeline operates on Landsat data. Landsat is a joint NASA/U.S. Geolical Survey satellite mission that provides continuous Earth obersvation data since 1984 at 30m spatial resolution with a temporal revisit frequency of 8-16 days. -Landsast carries multispectral optical instruments that observe the land surface in the visible to shortwave infrared spectrum. -For infos on Landsat, see [here](https://www.usgs.gov/core-science-systems/nli/landsat). +This pipeline operates on Landsat data. +Landsat is a joint NASA/U.S. Geolical Survey satellite mission that provides continuous Earth obersvation data since 1984 at 30m spatial resolution with a temporal revisit frequency of 8-16 days. +Landsat satellites carry multispectral optical instruments that observe the land surface in the visible to shortwave infrared spectrum. +For information on Landsat, see [here](https://www.usgs.gov/core-science-systems/nli/landsat). -Satellite data should be given as a path to a common root of all imagery. This is a common format used in geographic information systems, including FORCE, which is applied in this pipeline. The expected structure underneath the root directory should follow this example: +Satellite data should be given as a path to a common root of all imagery. +This is a common format used in geographic information systems, including FORCE, which is applied in this pipeline. +The expected structure underneath the root directory should follow this example: ```tree root @@ -53,9 +58,11 @@ root └── ... ``` -Subdirectories of `root/` contain _path_ and _row_ information as commonly used for Landsat imagery. As an example, the sub directory `181036/` contains imagery for path 18 and row 1036. +Subdirectories of `root/` contain _path_ and _row_ information as commonly used for Landsat imagery. +For example, the sub directory `181036/` contains imagery for path 18 and row 1036. -The next level of subdirectories contains the data for a specific day and from a specific source. Lets look at the example `LE07_L1TP_181036_20061217_20170105_01_T1`: +The next level of subdirectories contains the data for a specific day and from a specific source. +Lets look at the example `LE07_L1TP_181036_20061217_20170105_01_T1`: - "LE07" corresponds to Landsat 7 Enhanced - "L1TP" corresponds to Level-1 Terrain Corrected imagery @@ -65,7 +72,9 @@ The next level of subdirectories contains the data for a specific day and from a - "01" corresponds to version number of the remote sensing product - "T1" corresponds to the Tier of the data collection, which indicates the Tier 1 landsat collection in this case -On the lowest level of the structure, the actual data is stored. Looking at the contents of `LE07_L1TP_181036_20061217_20170105_01_T1`, we see that all files share the same prefix, followed by a specification of the specific files contents. These suffixes include: +On the lowest level of the structure, the actual data is stored. +Looking at the contents of `LE07_L1TP_181036_20061217_20170105_01_T1`, we see that all files share the same prefix, followed by a specification of the specific files contents. +These suffixes include: - "B" followed by a number _i_ identifying the band of the satellite (band 6 has two files as Landsat 7 has two thermal bands) - "BQA" identifies the quality information band @@ -73,9 +82,13 @@ On the lowest level of the structure, the actual data is stored. Looking at the - "ANG" identifies angle of observation and other geometric information information - "MTL" identifies meta data -All files within the lowest level of structure belong to a single observation. Files containing imagery (prefix starts with "B") should be `.tif` files. Files containing auxiliary data are text files. +All files within the lowest level of structure belong to a single observation. +Files containing imagery (prefix starts with "B") should be `.tif` files. +Files containing auxiliary data are text files. -This structure is automatically generated when [using FORCE to download the data](https://force-eo.readthedocs.io/en/latest/components/lower-level/level1/level1-csd.html?). We strongly suggest users to download data using FORCE. For example, executing the following code (e.g. with [FORCE in docker](https://force-eo.readthedocs.io/en/latest/setup/docker.html)) will download data for Landsat 4,5 and 7, in the time range from 1st January 1984 until 31st December 2006, including pictures with up to 70 percent of cloud coverage: +This structure is automatically generated when [using FORCE to download the data](https://force-eo.readthedocs.io/en/latest/components/lower-level/level1/level1-csd.html?). +We strongly suggest users to download data using FORCE. +For example, executing the following code (e.g. with [FORCE in docker](https://force-eo.readthedocs.io/en/latest/setup/docker.html)) will download data for Landsat 4,5 and 7, in the time range from 1st January 1984 until 31st December 2006, including pictures with up to 70 percent of cloud coverage: ```bash mkdir -p meta @@ -84,7 +97,8 @@ mkdir -p data force-level1-csd -s "LT04,LT05,LE07" -d "19840101,20061231" -c 0,70 meta/ data/ queue.txt vector/aoi.gpkg ``` -Note that you need to pass an area-of-interest file, see the area of interest section [Area of interest](#area-of-interest-aoi) for details. +Note that an area-of-interest file has to be passed, see the area of interest section [Area of interest](#area-of-interest-aoi) for details. +In addition, downloading data using FORCE may require access the machine-to-machine interfaces. The satellite imagery can be given to the pipeline using: @@ -92,13 +106,18 @@ The satellite imagery can be given to the pipeline using: --input '[path to imagery root]' ``` -The satellite imagery can also be provide as a tar archive. In this case it is mandatory to set `--input_tar` to `true`. Moreover, within the tar archive, the structure explained above has to be in place. In the example above `181036/` and `181035/` would need to be in the top level of the archive. +The satellite imagery can also be provide as a tar archive. +In this case it is mandatory to set `--input_tar` to `true`. +Moreover, within the tar archive, the structure explained above has to be in place. +In the example above `181036/` and `181035/` would need to be in the top level of the archive. ### Digital Elevation Model (DEM) -A DEM is necessary for topographic correction of Landsat data, and helps to distinguish between cloud, shadows and water surfaces. Common sources for digital elevation models are [Copernicus](https://www.copernicus.eu/en),[Shuttle Radar Topography Mission](https://www2.jpl.nasa.gov/srtm/) (SRTM), or [Advanced Spaceborne Thermal Emission and Reflection Radiometer](https://asterweb.jpl.nasa.gov/) (ASTER). +A DEM is necessary for topographic correction of Landsat data, and helps to distinguish between cloud, shadows and water surfaces. +Common sources for digital elevation models are [Copernicus](https://www.copernicus.eu/en),[Shuttle Radar Topography Mission](https://www2.jpl.nasa.gov/srtm/) (SRTM), or [Advanced Spaceborne Thermal Emission and Reflection Radiometer](https://asterweb.jpl.nasa.gov/) (ASTER). -The pipeline expects a path to the Digital Elevation Model root directory as a parameter. Concretely, the expected structure would look like this: +The pipeline expects a path to the Digital Elevation Model root directory as a parameter. +Concretely, the expected structure would look like this: ```tree dem @@ -115,7 +134,10 @@ The DEM can be given to the pipeline using: --dem '[path to dem root]' ``` -The digital elevation model can also be provide as a tar archive. In this case it is mandatory to set `--dem_tar` to `true`. Moreover, within the tar archive, the structure explained above has to be in place. In the example above `.vrt` and `/` would need to be in the top level of the archive. +The digital elevation model can also be provide as a tar archive. +In this case it is mandatory to set `--dem_tar` to `true`. +Moreover, within the tar archive, the structure explained above has to be in place. +In the example above `.vrt` and `/` would need to be in the top level of the archive. ### Water Vapor Database (WVDB) @@ -138,11 +160,14 @@ The WVDB can be given to the pipeline using: --wvdb '[path to wvdb dir]' ``` -The water vapor database can also be provide as a tar archive. In this case it is mandatory to set `--wvdb_tar` to `true`. All files of the wvdb would need to be in the top level of the archive. +The water vapor database can also be provide as a tar archive. +In this case it is mandatory to set `--wvdb_tar` to `true`. +All files of the wvdb would need to be in the top level of the archive. ### Datacube -The datacube definition stores information about the projection and reference grid of the generated datacube. For details see the [FORCE main paper](https://www.mdpi.com/2072-4292/11/9/1124). +The datacube definition stores information about the projection and reference grid of the generated datacube. +For details see the [FORCE main paper](https://www.mdpi.com/2072-4292/11/9/1124). The datacube definition is passed as a single file using: @@ -175,7 +200,8 @@ An example endmember definition (developed in [Hostert et al. 2003](https://www. 710 3220 5490 0 ``` -Each colum represents a different endmember. Columns represent Landsat bands (R,G,B, NIR, SWIR1, SWIR2). +Each colum represents a different endmember. +Columns represent Landsat bands (R,G,B, NIR, SWIR1, SWIR2). The endmembers can be passed in a single text-file using: @@ -189,7 +215,13 @@ Users can specify additional parameters to configure how the underlying workflow ### Sensor Levels -Data from different satellites can be processed within this workflow. Users may wish to include different satellites in preprocessing and in higher level processing. All input imagery is preprocessed. The `sensors_level2` parameter controls the selection of satellites for the higher level processing steps. The parameter has to follow the FORCE notation for level 2 processing. In particular, a string containing space-separated satellite identifiers has to be supplied (e.g. `"LND04 LND05"` to include Landsat 4 and 5). More details on available satellite identifiers can be found [here](https://force-eo.readthedocs.io/en/latest/components/higher-level/tsa/param.html), some common options include: +Data from different satellites can be processed within this workflow. +Users may wish to include different satellites in preprocessing and in higher level processing. +All input imagery is preprocessed. +The `sensors_level2` parameter controls the selection of satellites for the higher level processing steps. +The parameter has to follow the FORCE notation for level 2 processing. +In particular, a string containing space-separated satellite identifiers has to be supplied (e.g. `"LND04 LND05"` to include Landsat 4 and 5). +More details on available satellite identifiers can be found [here](https://force-eo.readthedocs.io/en/latest/components/higher-level/tsa/param.html), some common options include: - `"LND04"`: 6-band Landsat 4 TM - `"LND05"`: 6-band Landsat 5 TM @@ -198,7 +230,8 @@ Data from different satellites can be processed within this workflow. Users may - `"SEN2A"`: 10-band Sentinel-2A - `"SEN2B"`: 10-band Sentinel-2B -Note that the specified identifiers have to match the data made available to the workflow. In other words, satellite data for e.g. Landsat 5 can't be processed if it was not supplied using the `input` parameter. +Note that the specified identifiers have to match the data made available to the workflow. +In other words, satellite data for e.g. Landsat 5 can't be processed if it was not supplied using the `input` parameter. The satellite identifiers can be passed as follows: @@ -206,11 +239,18 @@ The satellite identifiers can be passed as follows: --sensors_level2 = '[higher level processing satellite identifier string]' ``` -Note that the parameter is optional and the default value is: `"LND04 LND05 LND07"`. Therefore, by default, the pipeline will use Landsat 4,5 and 7 imagery in higher level processing. +Note that the parameter is optional and the default value is: `"LND04 LND05 LND07"`. +Therefore, by default, the pipeline will use Landsat 4,5 and 7 imagery in higher level processing. ### Resolution -Resolution of satellite imagery defines the real size of a single pixel. As an example, a resolution of 30 meters indicates that a single pixel in the data covers a 30x30 meters square of the earth's surface. Users can customize the resolution that FORCE should assume. This does not necessarily have to match the resolution of the supplied data. FORCE will treat imagery as having the specified resolution. However, passing a resolution not matching the satellite data might lead to unexpected results. Resolution is specified in meters. +Resolution of satellite imagery defines the real size of a single pixel. +For example, a resolution of 30 meters indicates that a single pixel in the data covers a 30x30 meters square of the earth's surface. +Users can customize the resolution that FORCE should assume. +This does not necessarily have to match the resolution of the supplied data. +FORCE will treat imagery as having the specified resolution. +However, passing a resolution not matching the satellite data might lead to unexpected results. +Resolution is specified in meters. A custom resolution can be passed using: @@ -222,7 +262,8 @@ The default value is `30`, as most Landsat satellite natively provide this resol ### Temporal extent -In some scenarios, user may be interested to limit the temporal extent of analysis. To enables this, users can specify both start and end date in a string with this syntax: `'YYYY-MM-DD'`. +In some scenarios, user may be interested to limit the temporal extent of analysis. +To enables this, users can specify both start and end date in a string with this syntax: `'YYYY-MM-DD'`. Start and end date can be passed using: @@ -233,7 +274,10 @@ Start and end date can be passed using: ### Group size -The `group_size` parameters can be ignored in most cases. It defines how many satellite scenes are processed together. The parameters is used to balance the tradeoff between I/O and computational capacities on individual compute nodes. By default, `group_size` is set to `100`. +The `group_size` parameters can be ignored in most cases. +It defines how many satellite scenes are processed together. +The parameters is used to balance the tradeoff between I/O and computational capacities on individual compute nodes. +By default, `group_size` is set to `100`. The group size can be passed using: @@ -243,7 +287,15 @@ The group size can be passed using: ### Higher level processing configuration -During the higher level processing stage, time series analyses of different satellite bands and indexes is performed. The concrete bands and indexes can be defined using the `indexes` parameter. Spectral unmixing is performed in any case. Thus, passing an empty `indexes` parameter will restrict time series analyses to the results of spectral unmixing. All available indexes can be found [here](https://force-eo.readthedocs.io/en/latest/components/higher-level/tsa/param.html) above the `INDEX` parameter. The band/index codes need to be passed in a space-separated string. The default value, `indexes = "NDVI BLUE GREEN RED NIR SWIR1 SWIR2"`, enables time series analyses for the NDVI index and the blue, green, red, near-infrared and both shortwave infrared bands. Note that indexes are usually computed based on certain bands. If these bands are not present in the preprocessed data, these indexes can not be computed. +During the higher level processing stage, time series analyses of different satellite bands and indexes is performed. +The concrete bands and indexes can be defined using the `indexes` parameter. +Spectral unmixing is performed in any case. +Thus, passing an empty `indexes` parameter will restrict time series analyses to the results of spectral unmixing. +All available indexes can be found [here](https://force-eo.readthedocs.io/en/latest/components/higher-level/tsa/param.html) above the `INDEX` parameter. +The band/index codes need to be passed in a space-separated string. +The default value, `indexes = "NDVI BLUE GREEN RED NIR SWIR1 SWIR2"`, enables time series analyses for the NDVI index and the blue, green, red, near-infrared and both shortwave infrared bands. +Note that indexes are usually computed based on certain bands. +If these bands are not present in the preprocessed data, these indexes can not be computed. The bands and indexes can be passed using: @@ -251,7 +303,10 @@ The bands and indexes can be passed using: --indexes '[index-string]' ``` -In so cases, it may be desirable to analyze the the individual images in a time series. To enable such analysis, the parameter `return_tss` can be used. If set to `true`, the pipeline will return time series stacks for each tile and band combination. The option is disabled by default to reduce the output size. +In so cases, it may be desirable to analyze the the individual images in a time series. +To enable such analysis, the parameter `return_tss` can be used. +If set to `true`, the pipeline will return time series stacks for each tile and band combination. +The option is disabled by default to reduce the output size. The time series stack output can be enabled using: @@ -261,7 +316,12 @@ The time series stack output can be enabled using: ### Visualization -The workflow provides two types of results visualization and aggregation. The fine grained mosaic visualization contains all time series analyses results for all tiles in the original resolution. Pyramid visualizations present a broad overview of the same data but at a lower resolution. Both visualizations can be enabled or disabled using the parameters `mosaic_visualization` and `pyramid_visualization`. By default, both visualization methods are enabled. Note that the mosaic visualization is required to be enabled when using the `test` and `test_full` profiles to allow the pipeline to check the correctness of its results. +The workflow provides two types of results visualization and aggregation. +The fine grained mosaic visualization contains all time series analyses results for all tiles in the original resolution. +Pyramid visualizations present a broad overview of the same data but at a lower resolution. +Both visualizations can be enabled or disabled using the parameters `mosaic_visualization` and `pyramid_visualization`. +By default, both visualization methods are enabled. +Note that the mosaic visualization is required to be enabled when using the `test` and `test_full` profiles to allow the pipeline to check the correctness of its results. The visualizations can be enabled using: @@ -272,7 +332,9 @@ pyramid_visualization = '[boolean]' ### FORCE configuration -FORCE supports parallel computations. Users can specify the number of threads FORCE can spawn for a single preprocessing, or higher level processing process. This is archived through the `force_threads` parameter. +FORCE supports parallel computations. +Users can specify the number of threads FORCE can spawn for a single preprocessing, or higher level processing process. +This is achieved through the `force_threads` parameter. The number of threads can be passed using: @@ -284,7 +346,9 @@ The default value is 2. ### Intermediate data publishing -By default, preprocessing and higher level processing steps do not publish the `.tif` files that they generate to avoid bloating the available memory. However, analysis-ready-data (aka. ARD or level-2 data) and the results of time series analyses (aka. level-3 data) maybe be interesting to certain users. The files for preprocessing and higher level processing can, therefore, be published by setting the `save_ard` and `save_tsa` to `true`, respectively. +By default, preprocessing and higher level processing steps do not publish the `.tif` files that they generate to avoid bloating the available storage. +However, analysis-ready-data (aka. ARD or level-2 data) and the results of time series analyses (aka. level-3 data) maybe be interesting to certain users. +The files for preprocessing and higher level processing can, therefore, be published by setting the `save_ard` and `save_tsa` to `true`, respectively. Publishing of intermediate data can be enabled using: @@ -317,7 +381,8 @@ If you wish to repeatedly use the same parameters for multiple runs, rather than Pipeline settings can be provided in a `yaml` or `json` file via `-params-file `. :::warning -Do not use `-c ` to specify parameters as this will result in errors. Custom config files specified with `-c` must only be used for [tuning process resource specifications](https://nf-co.re/docs/usage/configuration#tuning-workflow-resources), other infrastructural tweaks (such as output directories), or module arguments (args). +Do not use `-c ` to specify parameters as this will result in errors. +Custom config files specified with `-c` must only be used for [tuning process resource specifications](https://nf-co.re/docs/usage/configuration#tuning-workflow-resources), other infrastructural tweaks (such as output directories), or module arguments (args). ::: The above pipeline run specified with a params file in yaml format: @@ -343,7 +408,9 @@ You can also generate such `YAML`/`JSON` files via [nf-core/launch](https://nf-c ### Updating the pipeline -When you run the above command, Nextflow automatically pulls the pipeline code from GitHub and stores it as a cached version. When running the pipeline after this, it will always use the cached version if available - even if the pipeline has been updated since. To make sure that you're running the latest version of the pipeline, make sure that you regularly update the cached version of the pipeline: +When you run the above command, Nextflow automatically pulls the pipeline code from GitHub and stores it as a cached version. +When running the pipeline after this, it will always use the cached version if available - even if the pipeline has been updated since. +To make sure that you're running the latest version of the pipeline, make sure that you regularly update the cached version of the pipeline: ```bash nextflow pull nf-core/rangeland @@ -351,9 +418,12 @@ nextflow pull nf-core/rangeland ### Reproducibility -It is a good idea to specify a pipeline version when running the pipeline on your data. This ensures that a specific version of the pipeline code and software are used when you run your pipeline. If you keep using the same tag, you'll be running the same version of the pipeline, even if there have been changes to the code since. +It is a good idea to specify a pipeline version when running the pipeline on your data. +This ensures that a specific version of the pipeline code and software are used when you run your pipeline. +If you keep using the same tag, you'll be running the same version of the pipeline, even if there have been changes to the code since. -First, go to the [nf-core/rangeland releases page](https://github.com/nf-core/rangeland/releases) and find the latest pipeline version - numeric only (eg. `1.3.1`). Then specify this when running the pipeline with `-r` (one hyphen) - eg. `-r 1.3.1`. Of course, you can switch to another version by changing the number after the `-r` flag. +First, go to the [nf-core/rangeland releases page](https://github.com/nf-core/rangeland/releases) and find the latest pipeline version - numeric only (eg. `1.3.1`). +Then specify this when running the pipeline with `-r` (one hyphen) - eg. `-r 1.3.1`. Of course, you can switch to another version by changing the number after the `-r` flag. This version number will be logged in reports when you run the pipeline, so that you'll know what you used when you look back in the future. For example, at the bottom of the MultiQC reports. @@ -371,7 +441,8 @@ These options are part of Nextflow and use a _single_ hyphen (pipeline parameter ### `-profile` -Use this parameter to choose a configuration profile. Profiles can give configuration presets for different compute environments. +Use this parameter to choose a configuration profile. +Profiles can give configuration presets for different compute environments. Several generic profiles are bundled with the pipeline which instruct the pipeline to use software packaged using different methods (Docker, Singularity, Podman, Shifter, Charliecloud, Apptainer, Conda) - see below. @@ -379,12 +450,14 @@ Several generic profiles are bundled with the pipeline which instruct the pipeli We highly recommend the use of Docker or Singularity containers for full pipeline reproducibility, however when this is not possible, Conda is also supported. ::: -The pipeline also dynamically loads configurations from [https://github.com/nf-core/configs](https://github.com/nf-core/configs) when it runs, making multiple config profiles for various institutional clusters available at run time. For more information and to see if your system is available in these configs please see the [nf-core/configs documentation](https://github.com/nf-core/configs#documentation). +The pipeline also dynamically loads configurations from [https://github.com/nf-core/configs](https://github.com/nf-core/configs) when it runs, making multiple config profiles for various institutional clusters available at run time. +For more information and to see if your system is available in these configs please see the [nf-core/configs documentation](https://github.com/nf-core/configs#documentation). Note that multiple profiles can be loaded, for example: `-profile test,docker` - the order of arguments is important! They are loaded in sequence, so later profiles can overwrite earlier profiles. -If `-profile` is not specified, the pipeline will run locally and expect all software to be installed and available on the `PATH`. This is _not_ recommended, since it can lead to different results on different machines dependent on the computer enviroment. +If `-profile` is not specified, the pipeline will run locally and expect all software to be installed and available on the `PATH`. +This is _not_ recommended, since it can lead to different results on different machines dependent on the computer enviroment. - `test` - A profile with a complete configuration for automated testing @@ -402,43 +475,58 @@ If `-profile` is not specified, the pipeline will run locally and expect all sof - `apptainer` - A generic configuration profile to be used with [Apptainer](https://apptainer.org/) - `wave` - - A generic configuration profile to enable [Wave](https://seqera.io/wave/) containers. Use together with one of the above (requires Nextflow ` 24.03.0-edge` or later). + - A generic configuration profile to enable [Wave](https://seqera.io/wave/) containers. + Use together with one of the above (requires Nextflow ` 24.03.0-edge` or later). - `conda` - - A generic configuration profile to be used with [Conda](https://conda.io/docs/). Please only use Conda as a last resort i.e. when it's not possible to run the pipeline with Docker, Singularity, Podman, Shifter, Charliecloud, or Apptainer. + - A generic configuration profile to be used with [Conda](https://conda.io/docs/). + Please only use Conda as a last resort i.e. when it's not possible to run the pipeline with Docker, Singularity, Podman, Shifter, Charliecloud, or Apptainer. ### `-resume` -Specify this when restarting a pipeline. Nextflow will use cached results from any pipeline steps where the inputs are the same, continuing from where it got to previously. For input to be considered the same, not only the names must be identical but the files' contents as well. For more info about this parameter, see [this blog post](https://www.nextflow.io/blog/2019/demystifying-nextflow-resume.html). +Specify this when restarting a pipeline. +Nextflow will use cached results from any pipeline steps where the inputs are the same, continuing from where it got to previously. +For input to be considered the same, not only the names must be identical but the files' contents as well. +For more info about this parameter, see [this blog post](https://www.nextflow.io/blog/2019/demystifying-nextflow-resume.html). -You can also supply a run name to resume a specific run: `-resume [run-name]`. Use the `nextflow log` command to show previous run names. +You can also supply a run name to resume a specific run: `-resume [run-name]`. +Use the `nextflow log` command to show previous run names. ### `-c` -Specify the path to a specific config file (this is a core Nextflow command). See the [nf-core website documentation](https://nf-co.re/usage/configuration) for more information. +Specify the path to a specific config file (this is a core Nextflow command). +See the [nf-core website documentation](https://nf-co.re/usage/configuration) for more information. ## Custom configuration ### Resource requests -Whilst the default requirements set within the pipeline will hopefully work for most people and with most input data, you may find that you want to customise the compute resources that the pipeline requests. Each step in the pipeline has a default set of requirements for number of CPUs, memory and time. For most of the steps in the pipeline, if the job exits with any of the error codes specified [here](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/conf/base.config#L18) it will automatically be resubmitted with higher requests (2 x original, then 3 x original). If it still fails after the third attempt then the pipeline execution is stopped. +Whilst the default requirements set within the pipeline will hopefully work for most people and with most input data, you may find that you want to customise the compute resources that the pipeline requests. +Each step in the pipeline has a default set of requirements for number of CPUs, memory and time. +For most of the steps in the pipeline, if the job exits with any of the error codes specified [here](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/conf/base.config#L18) it will automatically be resubmitted with higher requests (2 x original, then 3 x original). +If it still fails after the third attempt then the pipeline execution is stopped. To change the resource requests, please see the [max resources](https://nf-co.re/docs/usage/configuration#max-resources) and [tuning workflow resources](https://nf-co.re/docs/usage/configuration#tuning-workflow-resources) section of the nf-core website. ### Custom Containers -In some cases you may wish to change which container or conda environment a step of the pipeline uses for a particular tool. By default nf-core pipelines use containers and software from the [biocontainers](https://biocontainers.pro/) or [bioconda](https://bioconda.github.io/) projects. However in some cases the pipeline specified version maybe out of date. +In some cases you may wish to change which container or conda environment a step of the pipeline uses for a particular tool. +By default nf-core pipelines use containers and software from the [biocontainers](https://biocontainers.pro/) or [bioconda](https://bioconda.github.io/) projects. +However in some cases the pipeline specified version maybe out of date. To use a different container from the default container or conda environment specified in a pipeline, please see the [updating tool versions](https://nf-co.re/docs/usage/configuration#updating-tool-versions) section of the nf-core website. ### Custom Tool Arguments -A pipeline might not always support every possible argument or option of a particular tool used in pipeline. Fortunately, nf-core pipelines provide some freedom to users to insert additional parameters that the pipeline does not include by default. +A pipeline might not always support every possible argument or option of a particular tool used in pipeline. +Fortunately, nf-core pipelines provide some freedom to users to insert additional parameters that the pipeline does not include by default. To learn how to provide additional arguments to a particular tool of the pipeline, please see the [customising tool arguments](https://nf-co.re/docs/usage/configuration#customising-tool-arguments) section of the nf-core website. ### nf-core/configs -In most cases, you will only need to create a custom config as a one-off but if you and others within your organisation are likely to be running nf-core pipelines regularly and need to use the same settings regularly it may be a good idea to request that your custom config file is uploaded to the `nf-core/configs` git repository. Before you do this please can you test that the config file works with your pipeline of choice using the `-c` parameter. You can then create a pull request to the `nf-core/configs` repository with the addition of your config file, associated documentation file (see examples in [`nf-core/configs/docs`](https://github.com/nf-core/configs/tree/master/docs)), and amending [`nfcore_custom.config`](https://github.com/nf-core/configs/blob/master/nfcore_custom.config) to include your custom profile. +In most cases, you will only need to create a custom config as a one-off but if you and others within your organisation are likely to be running nf-core pipelines regularly and need to use the same settings regularly it may be a good idea to request that your custom config file is uploaded to the `nf-core/configs` git repository. +Before you do this please can you test that the config file works with your pipeline of choice using the `-c` parameter. +You can then create a pull request to the `nf-core/configs` repository with the addition of your config file, associated documentation file (see examples in [`nf-core/configs/docs`](https://github.com/nf-core/configs/tree/master/docs)), and amending [`nfcore_custom.config`](https://github.com/nf-core/configs/blob/master/nfcore_custom.config) to include your custom profile. See the main [Nextflow documentation](https://www.nextflow.io/docs/latest/config.html) for more information about creating your own configuration files. @@ -454,9 +542,11 @@ For a thorough list, please refer the [Azure Sizes for virtual machines in Azure ## Running in the background -Nextflow handles job submissions and supervises the running jobs. The Nextflow process must run until the pipeline is finished. +Nextflow handles job submissions and supervises the running jobs. +The Nextflow process must run until the pipeline is finished. -The Nextflow `-bg` flag launches Nextflow in the background, detached from your terminal so that the workflow does not stop if you log out of your session. The logs are saved to a file. +The Nextflow `-bg` flag launches Nextflow in the background, detached from your terminal so that the workflow does not stop if you log out of your session. +The logs are saved to a file. Alternatively, you can use `screen` / `tmux` or similar tool to create a detached session which you can log back into at a later time. Some HPC setups also allow you to run nextflow within a cluster job submitted your job scheduler (from where it submits more jobs). From 17db3baa571e2ccd16b9b713dd96e5ea23b4b667 Mon Sep 17 00:00:00 2001 From: Felix Kummer Date: Thu, 29 Aug 2024 09:56:36 +0200 Subject: [PATCH 09/38] Removed unnecessarily ignored parameters in test profile --- conf/test.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/test.config b/conf/test.config index 8b5506f..d8b1d47 100644 --- a/conf/test.config +++ b/conf/test.config @@ -54,7 +54,7 @@ params { // enable mosaic for result checking mosaic_visualization = true - validationSchemaIgnoreParams = "peak_yoc_ref,peak_change_ref,herbaceous_yoc_ref,herbaceous_change_ref,woody_yoc_ref,woody_change_ref,config_profile_description,config_profile_name" + validationSchemaIgnoreParams = "peak_yoc_ref,peak_change_ref,herbaceous_yoc_ref,herbaceous_change_ref,woody_yoc_ref,woody_change_ref" } process { From 4a7518b9a428f2137976cb98f0160c923b0676ca Mon Sep 17 00:00:00 2001 From: Felix Kummer Date: Thu, 29 Aug 2024 10:10:36 +0200 Subject: [PATCH 10/38] Improved parameter references in docs --- docs/output.md | 8 ++++---- docs/usage.md | 36 ++++++++++++++++++------------------ 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/docs/output.md b/docs/output.md index b13b1d0..93eb93c 100644 --- a/docs/output.md +++ b/docs/output.md @@ -39,7 +39,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d [untar](https://nf-co.re/modules/untar) is a nf-core module used to extract files from tar archives. -Invokation of untar depends on certain parameters (i.e `input_tar`, `dem_tar` and `wvdb_tar`). +Invocation of untar depends on certain parameters (i.e `--input_tar`, `--dem_tar` and `--wvdb_tar`). Thus, the outputs files are only generated when these are set to `true`. ### Preparation @@ -87,7 +87,7 @@ Logs and analysis-ready-data (ARD) are generated using the [force-l2ps](https:// Logs can be consulted for debugging purposes. ARD may be collected as a basis for other remote sensing workflows. The ARD in `level2_ard/` consist two `.tif` files per initial input image, a quality data file and the atmospherically corrected satellite data. -Note that the `.tif` files are only published when the `save_ard` parameter is set to `true` to avoid bloating the storage. +Note that the `.tif` files are only published when the `--save_ard` parameter is set to `true` to avoid bloating the storage. ### Higher-level-Processing @@ -111,9 +111,9 @@ Concretely, a set of endmember (provided using `--endmember`) is exploited to de Next, time series analysis for different vegetation characteristics is performed. The resulting trend files in `trend_files/` can be investigated to view trends for individual tiles. -However, these files are only published if the `save_tsa` parameter is set to `true`. +However, these files are only published if the `--save_tsa` parameter is set to `true`. -If the `return_tss` parameter was set to `true`, the pipeline will also output files with the `TSS` ending. +If the `--return_tss` parameter was set to `true`, the pipeline will also output files with the `TSS` ending. These files contain the time series stack(TSS) for the given tile and index or band. Here, for each date of acquisition, an image is available that contains the values for that date. diff --git a/docs/usage.md b/docs/usage.md index 074b9ae..0c3cf5a 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -116,7 +116,7 @@ In the example above `181036/` and `181035/` would need to be in the top level o A DEM is necessary for topographic correction of Landsat data, and helps to distinguish between cloud, shadows and water surfaces. Common sources for digital elevation models are [Copernicus](https://www.copernicus.eu/en),[Shuttle Radar Topography Mission](https://www2.jpl.nasa.gov/srtm/) (SRTM), or [Advanced Spaceborne Thermal Emission and Reflection Radiometer](https://asterweb.jpl.nasa.gov/) (ASTER). -The pipeline expects a path to the Digital Elevation Model root directory as a parameter. +The pipeline expects a path to the digital elevation model root directory as the `--dem` parameter. Concretely, the expected structure would look like this: ```tree @@ -218,7 +218,7 @@ Users can specify additional parameters to configure how the underlying workflow Data from different satellites can be processed within this workflow. Users may wish to include different satellites in preprocessing and in higher level processing. All input imagery is preprocessed. -The `sensors_level2` parameter controls the selection of satellites for the higher level processing steps. +The `--sensors_level2` parameter controls the selection of satellites for the higher level processing steps. The parameter has to follow the FORCE notation for level 2 processing. In particular, a string containing space-separated satellite identifiers has to be supplied (e.g. `"LND04 LND05"` to include Landsat 4 and 5). More details on available satellite identifiers can be found [here](https://force-eo.readthedocs.io/en/latest/components/higher-level/tsa/param.html), some common options include: @@ -231,7 +231,7 @@ More details on available satellite identifiers can be found [here](https://forc - `"SEN2B"`: 10-band Sentinel-2B Note that the specified identifiers have to match the data made available to the workflow. -In other words, satellite data for e.g. Landsat 5 can't be processed if it was not supplied using the `input` parameter. +In other words, satellite data for e.g. Landsat 5 can't be processed if it was not supplied using the `--input` parameter. The satellite identifiers can be passed as follows: @@ -274,10 +274,10 @@ Start and end date can be passed using: ### Group size -The `group_size` parameters can be ignored in most cases. +The `--group_size` parameter can be ignored in most cases. It defines how many satellite scenes are processed together. -The parameters is used to balance the tradeoff between I/O and computational capacities on individual compute nodes. -By default, `group_size` is set to `100`. +The parameter is used to balance the tradeoff between I/O and computational capacities on individual compute nodes. +By default, `--group_size` is set to `100`. The group size can be passed using: @@ -288,12 +288,12 @@ The group size can be passed using: ### Higher level processing configuration During the higher level processing stage, time series analyses of different satellite bands and indexes is performed. -The concrete bands and indexes can be defined using the `indexes` parameter. +The concrete bands and indexes can be defined using the `--indexes` parameter. Spectral unmixing is performed in any case. -Thus, passing an empty `indexes` parameter will restrict time series analyses to the results of spectral unmixing. -All available indexes can be found [here](https://force-eo.readthedocs.io/en/latest/components/higher-level/tsa/param.html) above the `INDEX` parameter. +Thus, passing an empty `--indexes` parameter will restrict time series analyses to the results of spectral unmixing. +All available indexes can be found [here](https://force-eo.readthedocs.io/en/latest/components/higher-level/tsa/param.html) above the `INDEX` entry. The band/index codes need to be passed in a space-separated string. -The default value, `indexes = "NDVI BLUE GREEN RED NIR SWIR1 SWIR2"`, enables time series analyses for the NDVI index and the blue, green, red, near-infrared and both shortwave infrared bands. +The default value, `--indexes = "NDVI BLUE GREEN RED NIR SWIR1 SWIR2"`, enables time series analyses for the NDVI index and the blue, green, red, near-infrared and both shortwave infrared bands. Note that indexes are usually computed based on certain bands. If these bands are not present in the preprocessed data, these indexes can not be computed. @@ -304,7 +304,7 @@ The bands and indexes can be passed using: ``` In so cases, it may be desirable to analyze the the individual images in a time series. -To enable such analysis, the parameter `return_tss` can be used. +To enable such analysis, the parameter `--return_tss` can be used. If set to `true`, the pipeline will return time series stacks for each tile and band combination. The option is disabled by default to reduce the output size. @@ -319,22 +319,22 @@ The time series stack output can be enabled using: The workflow provides two types of results visualization and aggregation. The fine grained mosaic visualization contains all time series analyses results for all tiles in the original resolution. Pyramid visualizations present a broad overview of the same data but at a lower resolution. -Both visualizations can be enabled or disabled using the parameters `mosaic_visualization` and `pyramid_visualization`. +Both visualizations can be enabled or disabled using the parameters `--mosaic_visualization` and `--pyramid_visualization`. By default, both visualization methods are enabled. Note that the mosaic visualization is required to be enabled when using the `test` and `test_full` profiles to allow the pipeline to check the correctness of its results. The visualizations can be enabled using: ```bash -mosaic_visualization = '[boolean]' -pyramid_visualization = '[boolean]' +--mosaic_visualization = '[boolean]' +--pyramid_visualization = '[boolean]' ``` ### FORCE configuration FORCE supports parallel computations. Users can specify the number of threads FORCE can spawn for a single preprocessing, or higher level processing process. -This is achieved through the `force_threads` parameter. +This is achieved through the `--force_threads` parameter. The number of threads can be passed using: @@ -348,13 +348,13 @@ The default value is 2. By default, preprocessing and higher level processing steps do not publish the `.tif` files that they generate to avoid bloating the available storage. However, analysis-ready-data (aka. ARD or level-2 data) and the results of time series analyses (aka. level-3 data) maybe be interesting to certain users. -The files for preprocessing and higher level processing can, therefore, be published by setting the `save_ard` and `save_tsa` to `true`, respectively. +The files for preprocessing and higher level processing can, therefore, be published by setting the `--save_ard` and `--save_tsa` to `true`, respectively. Publishing of intermediate data can be enabled using: ```bash -save_ard = '[boolean]' -save_tsa = '[boolean]' +--save_ard = '[boolean]' +--save_tsa = '[boolean]' ``` ## Running the pipeline From 494933467891fa5f3ae5fff214cde3b1a6aabcdc Mon Sep 17 00:00:00 2001 From: Felix Kummer Date: Fri, 6 Sep 2024 11:48:17 +0200 Subject: [PATCH 11/38] Replaced retry strategies with error_retry label --- conf/modules.config | 13 ++++++------- modules/local/force-higher_level.nf | 1 + modules/local/force-preprocess.nf | 1 + modules/local/higher_level_force_config.nf | 1 + modules/local/merge.nf | 1 + modules/local/preprocess_force_config.nf | 1 + 6 files changed, 11 insertions(+), 7 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index de1c7e4..911dce9 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -35,8 +35,6 @@ process { } withName: "FORCE_PREPROCESS" { - errorStrategy = 'retry' - maxRetries = 5 publishDir = [ [ path: { "${params.outdir}/preprocess/${task.tag}/logs" }, @@ -54,8 +52,6 @@ process { withName: "HIGHER_LEVEL_CONFIG" { - errorStrategy = 'retry' - maxRetries = 5 publishDir = [ path: { "${params.outdir}/higher-level/${task.tag}/param_files" }, mode: params.publish_dir_mode, @@ -98,15 +94,18 @@ process { } withName: "CHECK_RESULTS" { - errorStrategy = { task.exitStatus == 143 ? 'retry' : 'ignore' } + publishDir = [ + enabled: false + ] + } + + withName: "CHECK_RESULTS_FULL" { publishDir = [ enabled: false ] } withName: "PREPROCESS_CONFIG" { - errorStrategy = 'retry' - maxRetries = 5 publishDir = [ path: { "${params.outdir}/preprocess/${task.tag}/param_files" }, mode: params.publish_dir_mode, diff --git a/modules/local/force-higher_level.nf b/modules/local/force-higher_level.nf index 9e91773..6648195 100644 --- a/modules/local/force-higher_level.nf +++ b/modules/local/force-higher_level.nf @@ -1,6 +1,7 @@ process FORCE_HIGHER_LEVEL { tag { tile } label 'process_medium' + label 'error_retry' container "docker.io/davidfrantz/force:3.7.10" diff --git a/modules/local/force-preprocess.nf b/modules/local/force-preprocess.nf index 75f5ae3..d101429 100644 --- a/modules/local/force-preprocess.nf +++ b/modules/local/force-preprocess.nf @@ -1,6 +1,7 @@ process FORCE_PREPROCESS { tag { data.simpleName } label 'process_medium' + label 'error_retry' container "docker.io/davidfrantz/force:3.7.10" diff --git a/modules/local/higher_level_force_config.nf b/modules/local/higher_level_force_config.nf index afcadf4..5b8b9b6 100644 --- a/modules/local/higher_level_force_config.nf +++ b/modules/local/higher_level_force_config.nf @@ -1,6 +1,7 @@ process HIGHER_LEVEL_CONFIG { tag { tile } label 'process_single' + label 'error_retry' container "docker.io/davidfrantz/force:3.7.10" diff --git a/modules/local/merge.nf b/modules/local/merge.nf index 3126637..812a9de 100644 --- a/modules/local/merge.nf +++ b/modules/local/merge.nf @@ -1,6 +1,7 @@ process MERGE { tag { id } label 'process_low' + label 'error_retry' container "docker.io/davidfrantz/force:3.7.10" diff --git a/modules/local/preprocess_force_config.nf b/modules/local/preprocess_force_config.nf index 850675c..8a5a67b 100644 --- a/modules/local/preprocess_force_config.nf +++ b/modules/local/preprocess_force_config.nf @@ -1,6 +1,7 @@ process PREPROCESS_CONFIG { tag { data.simpleName } label 'process_single' + label 'error_retry' container "docker.io/davidfrantz/force:3.7.10" From d7ba83bf4d3eafb4fb3d38278057df46fadf5ef5 Mon Sep 17 00:00:00 2001 From: Felix Kummer Date: Wed, 18 Sep 2024 10:06:01 +0200 Subject: [PATCH 12/38] Adopted nf-core pseudo-standard directory structure for local modules --- .../local/{check_results.nf => check_results/main.nf} | 0 .../main.nf} | 0 .../main.nf} | 0 .../main.nf} | 0 .../main.nf} | 0 .../local/{force-mosaic.nf => force-mosaic/main.nf} | 0 .../{force-preprocess.nf => force-preprocess/main.nf} | 0 .../local/{force-pyramid.nf => force-pyramid/main.nf} | 0 .../main.nf} | 0 modules/local/{merge.nf => merge/main.nf} | 0 .../main.nf} | 0 subworkflows/local/higher_level.nf | 8 ++++---- subworkflows/local/preprocessing.nf | 10 +++++----- workflows/rangeland.nf | 4 ++-- 14 files changed, 11 insertions(+), 11 deletions(-) rename modules/local/{check_results.nf => check_results/main.nf} (100%) rename modules/local/{check_results_full.nf => check_results_full/main.nf} (100%) rename modules/local/{force-generate_analysis_mask.nf => force-generate_analysis_mask/main.nf} (100%) rename modules/local/{force-generate_tile_allow_list.nf => force-generate_tile_allow_list/main.nf} (100%) rename modules/local/{force-higher_level.nf => force-higher_level/main.nf} (100%) rename modules/local/{force-mosaic.nf => force-mosaic/main.nf} (100%) rename modules/local/{force-preprocess.nf => force-preprocess/main.nf} (100%) rename modules/local/{force-pyramid.nf => force-pyramid/main.nf} (100%) rename modules/local/{higher_level_force_config.nf => higher_level_force_config/main.nf} (100%) rename modules/local/{merge.nf => merge/main.nf} (100%) rename modules/local/{preprocess_force_config.nf => preprocess_force_config/main.nf} (100%) diff --git a/modules/local/check_results.nf b/modules/local/check_results/main.nf similarity index 100% rename from modules/local/check_results.nf rename to modules/local/check_results/main.nf diff --git a/modules/local/check_results_full.nf b/modules/local/check_results_full/main.nf similarity index 100% rename from modules/local/check_results_full.nf rename to modules/local/check_results_full/main.nf diff --git a/modules/local/force-generate_analysis_mask.nf b/modules/local/force-generate_analysis_mask/main.nf similarity index 100% rename from modules/local/force-generate_analysis_mask.nf rename to modules/local/force-generate_analysis_mask/main.nf diff --git a/modules/local/force-generate_tile_allow_list.nf b/modules/local/force-generate_tile_allow_list/main.nf similarity index 100% rename from modules/local/force-generate_tile_allow_list.nf rename to modules/local/force-generate_tile_allow_list/main.nf diff --git a/modules/local/force-higher_level.nf b/modules/local/force-higher_level/main.nf similarity index 100% rename from modules/local/force-higher_level.nf rename to modules/local/force-higher_level/main.nf diff --git a/modules/local/force-mosaic.nf b/modules/local/force-mosaic/main.nf similarity index 100% rename from modules/local/force-mosaic.nf rename to modules/local/force-mosaic/main.nf diff --git a/modules/local/force-preprocess.nf b/modules/local/force-preprocess/main.nf similarity index 100% rename from modules/local/force-preprocess.nf rename to modules/local/force-preprocess/main.nf diff --git a/modules/local/force-pyramid.nf b/modules/local/force-pyramid/main.nf similarity index 100% rename from modules/local/force-pyramid.nf rename to modules/local/force-pyramid/main.nf diff --git a/modules/local/higher_level_force_config.nf b/modules/local/higher_level_force_config/main.nf similarity index 100% rename from modules/local/higher_level_force_config.nf rename to modules/local/higher_level_force_config/main.nf diff --git a/modules/local/merge.nf b/modules/local/merge/main.nf similarity index 100% rename from modules/local/merge.nf rename to modules/local/merge/main.nf diff --git a/modules/local/preprocess_force_config.nf b/modules/local/preprocess_force_config/main.nf similarity index 100% rename from modules/local/preprocess_force_config.nf rename to modules/local/preprocess_force_config/main.nf diff --git a/subworkflows/local/higher_level.nf b/subworkflows/local/higher_level.nf index d0bc922..9cb44b4 100644 --- a/subworkflows/local/higher_level.nf +++ b/subworkflows/local/higher_level.nf @@ -1,7 +1,7 @@ -include { HIGHER_LEVEL_CONFIG } from '../../modules/local/higher_level_force_config.nf' -include { FORCE_HIGHER_LEVEL } from '../../modules/local/force-higher_level.nf' -include { FORCE_MOSAIC } from '../../modules/local/force-mosaic.nf' -include { FORCE_PYRAMID } from '../../modules/local/force-pyramid.nf' +include { HIGHER_LEVEL_CONFIG } from '../../modules/local/higher_level_force_config/main' +include { FORCE_HIGHER_LEVEL } from '../../modules/local/force-higher_level/main' +include { FORCE_MOSAIC } from '../../modules/local/force-mosaic/main' +include { FORCE_PYRAMID } from '../../modules/local/force-pyramid/main' workflow HIGHER_LEVEL { diff --git a/subworkflows/local/preprocessing.nf b/subworkflows/local/preprocessing.nf index 453c1d8..63ef11d 100644 --- a/subworkflows/local/preprocessing.nf +++ b/subworkflows/local/preprocessing.nf @@ -1,8 +1,8 @@ -include { FORCE_GENERATE_TILE_ALLOW_LIST } from '../../modules/local/force-generate_tile_allow_list' -include { FORCE_GENERATE_ANALYSIS_MASK } from '../../modules/local/force-generate_analysis_mask' -include { PREPROCESS_CONFIG } from '../../modules/local/preprocess_force_config' -include { FORCE_PREPROCESS } from '../../modules/local/force-preprocess' -include { MERGE as MERGE_BOA; MERGE as MERGE_QAI } from '../../modules/local/merge' +include { FORCE_GENERATE_TILE_ALLOW_LIST } from '../../modules/local/force-generate_tile_allow_list/main' +include { FORCE_GENERATE_ANALYSIS_MASK } from '../../modules/local/force-generate_analysis_mask/main' +include { PREPROCESS_CONFIG } from '../../modules/local/preprocess_force_config/main' +include { FORCE_PREPROCESS } from '../../modules/local/force-preprocess/main' +include { MERGE as MERGE_BOA; MERGE as MERGE_QAI } from '../../modules/local/merge/main' // Closure to extract the parent directory of a file def extractDirectory = { it.parent.toString().substring(it.parent.toString().lastIndexOf('/') + 1 ) } diff --git a/workflows/rangeland.nf b/workflows/rangeland.nf index dd01dfd..b3bb782 100644 --- a/workflows/rangeland.nf +++ b/workflows/rangeland.nf @@ -26,8 +26,8 @@ include { HIGHER_LEVEL } from '../subworkflows/local/higher_level' // MODULES // -include { CHECK_RESULTS } from '../modules/local/check_results' -include { CHECK_RESULTS_FULL } from '../modules/local/check_results_full' +include { CHECK_RESULTS } from '../modules/local/check_results/main' +include { CHECK_RESULTS_FULL } from '../modules/local/check_results_full/main' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IMPORT NF-CORE MODULES/SUBWORKFLOWS From 64c909acf1e0a2a560a010b92b6f1fe950305be0 Mon Sep 17 00:00:00 2001 From: Felix Kummer Date: Wed, 18 Sep 2024 10:23:55 +0200 Subject: [PATCH 13/38] Updated nf-core untar module --- modules.json | 2 +- modules/nf-core/untar/environment.yml | 7 + modules/nf-core/untar/main.nf | 31 +++- modules/nf-core/untar/tests/main.nf.test | 85 ++++++++++ modules/nf-core/untar/tests/main.nf.test.snap | 158 ++++++++++++++++++ modules/nf-core/untar/tests/tags.yml | 2 + 6 files changed, 279 insertions(+), 6 deletions(-) create mode 100644 modules/nf-core/untar/environment.yml create mode 100644 modules/nf-core/untar/tests/main.nf.test create mode 100644 modules/nf-core/untar/tests/main.nf.test.snap create mode 100644 modules/nf-core/untar/tests/tags.yml diff --git a/modules.json b/modules.json index 9e83e0b..fa2f544 100644 --- a/modules.json +++ b/modules.json @@ -12,7 +12,7 @@ }, "untar": { "branch": "master", - "git_sha": "cfd937a668919d948f6fcbf4218e79de50c2f36f", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] } } diff --git a/modules/nf-core/untar/environment.yml b/modules/nf-core/untar/environment.yml new file mode 100644 index 0000000..c779485 --- /dev/null +++ b/modules/nf-core/untar/environment.yml @@ -0,0 +1,7 @@ +channels: + - conda-forge + - bioconda +dependencies: + - conda-forge::grep=3.11 + - conda-forge::sed=4.8 + - conda-forge::tar=1.34 diff --git a/modules/nf-core/untar/main.nf b/modules/nf-core/untar/main.nf index 61461c3..9bd8f55 100644 --- a/modules/nf-core/untar/main.nf +++ b/modules/nf-core/untar/main.nf @@ -2,10 +2,10 @@ process UNTAR { tag "$archive" label 'process_single' - conda "conda-forge::sed=4.7 conda-forge::grep=3.11 conda-forge::tar=1.34" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/ubuntu:20.04' : - 'nf-core/ubuntu:20.04' }" + 'https://depot.galaxyproject.org/singularity/ubuntu:22.04' : + 'nf-core/ubuntu:22.04' }" input: tuple val(meta), path(archive) @@ -52,8 +52,29 @@ process UNTAR { stub: prefix = task.ext.prefix ?: ( meta.id ? "${meta.id}" : archive.toString().replaceFirst(/\.[^\.]+(.gz)?$/, "")) """ - mkdir $prefix - touch ${prefix}/file.txt + mkdir ${prefix} + ## Dry-run untaring the archive to get the files and place all in prefix + if [[ \$(tar -taf ${archive} | grep -o -P "^.*?\\/" | uniq | wc -l) -eq 1 ]]; then + for i in `tar -tf ${archive}`; + do + if [[ \$(echo "\${i}" | grep -E "/\$") == "" ]]; + then + touch \${i} + else + mkdir -p \${i} + fi + done + else + for i in `tar -tf ${archive}`; + do + if [[ \$(echo "\${i}" | grep -E "/\$") == "" ]]; + then + touch ${prefix}/\${i} + else + mkdir -p ${prefix}/\${i} + fi + done + fi cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/untar/tests/main.nf.test b/modules/nf-core/untar/tests/main.nf.test new file mode 100644 index 0000000..c957517 --- /dev/null +++ b/modules/nf-core/untar/tests/main.nf.test @@ -0,0 +1,85 @@ +nextflow_process { + + name "Test Process UNTAR" + script "../main.nf" + process "UNTAR" + tag "modules" + tag "modules_nfcore" + tag "untar" + + test("test_untar") { + + when { + process { + """ + input[0] = [ [], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/db/kraken2.tar.gz', checkIfExists: true) ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + ) + } + } + + test("test_untar_onlyfiles") { + + when { + process { + """ + input[0] = [ [], file(params.modules_testdata_base_path + 'generic/tar/hello.tar.gz', checkIfExists: true) ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + ) + } + } + + test("test_untar - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ [], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/db/kraken2.tar.gz', checkIfExists: true) ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + ) + } + } + + test("test_untar_onlyfiles - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ [], file(params.modules_testdata_base_path + 'generic/tar/hello.tar.gz', checkIfExists: true) ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + ) + } + } +} diff --git a/modules/nf-core/untar/tests/main.nf.test.snap b/modules/nf-core/untar/tests/main.nf.test.snap new file mode 100644 index 0000000..ceb91b7 --- /dev/null +++ b/modules/nf-core/untar/tests/main.nf.test.snap @@ -0,0 +1,158 @@ +{ + "test_untar_onlyfiles": { + "content": [ + { + "0": [ + [ + [ + + ], + [ + "hello.txt:md5,e59ff97941044f85df5297e1c302d260" + ] + ] + ], + "1": [ + "versions.yml:md5,6063247258c56fd271d076bb04dd7536" + ], + "untar": [ + [ + [ + + ], + [ + "hello.txt:md5,e59ff97941044f85df5297e1c302d260" + ] + ] + ], + "versions": [ + "versions.yml:md5,6063247258c56fd271d076bb04dd7536" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-10T12:04:28.231047" + }, + "test_untar_onlyfiles - stub": { + "content": [ + { + "0": [ + [ + [ + + ], + [ + "hello.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "1": [ + "versions.yml:md5,6063247258c56fd271d076bb04dd7536" + ], + "untar": [ + [ + [ + + ], + [ + "hello.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "versions": [ + "versions.yml:md5,6063247258c56fd271d076bb04dd7536" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-10T12:04:45.773103" + }, + "test_untar - stub": { + "content": [ + { + "0": [ + [ + [ + + ], + [ + "hash.k2d:md5,d41d8cd98f00b204e9800998ecf8427e", + "opts.k2d:md5,d41d8cd98f00b204e9800998ecf8427e", + "taxo.k2d:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "1": [ + "versions.yml:md5,6063247258c56fd271d076bb04dd7536" + ], + "untar": [ + [ + [ + + ], + [ + "hash.k2d:md5,d41d8cd98f00b204e9800998ecf8427e", + "opts.k2d:md5,d41d8cd98f00b204e9800998ecf8427e", + "taxo.k2d:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "versions": [ + "versions.yml:md5,6063247258c56fd271d076bb04dd7536" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-10T12:04:36.777441" + }, + "test_untar": { + "content": [ + { + "0": [ + [ + [ + + ], + [ + "hash.k2d:md5,8b8598468f54a7087c203ad0190555d9", + "opts.k2d:md5,a033d00cf6759407010b21700938f543", + "taxo.k2d:md5,094d5891cdccf2f1468088855c214b2c" + ] + ] + ], + "1": [ + "versions.yml:md5,6063247258c56fd271d076bb04dd7536" + ], + "untar": [ + [ + [ + + ], + [ + "hash.k2d:md5,8b8598468f54a7087c203ad0190555d9", + "opts.k2d:md5,a033d00cf6759407010b21700938f543", + "taxo.k2d:md5,094d5891cdccf2f1468088855c214b2c" + ] + ] + ], + "versions": [ + "versions.yml:md5,6063247258c56fd271d076bb04dd7536" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-10T12:04:19.377674" + } +} \ No newline at end of file diff --git a/modules/nf-core/untar/tests/tags.yml b/modules/nf-core/untar/tests/tags.yml new file mode 100644 index 0000000..feb6f15 --- /dev/null +++ b/modules/nf-core/untar/tests/tags.yml @@ -0,0 +1,2 @@ +untar: + - modules/nf-core/untar/** From 5e006c0330ce8f530903d712503bc5f0753e32ad Mon Sep 17 00:00:00 2001 From: Felix Kummer Date: Wed, 18 Sep 2024 12:00:02 +0200 Subject: [PATCH 14/38] Enriched schema with patterns for parameters --- docs/usage.md | 1 + nextflow_schema.json | 37 ++++++++++++++++++++++++++----------- 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index 0c3cf5a..06ce2fd 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -178,6 +178,7 @@ The datacube definition is passed as a single file using: ### Area of interest (AOI) The area of interest is a geospatial vector dataset that holds the boundary of the targeted area. +The file must be a shapefile or geopackage vector file. AOI is passed as a single file using: diff --git a/nextflow_schema.json b/nextflow_schema.json index 4fb0b6d..26dad4a 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -17,7 +17,8 @@ "fa_icon": "fas fa-satellite", "help_text": "Set this to the root directory of all satellite imagery. Directory structure should match format of data downloaded with '$ force-level1-csd\n' For concrete directory structure see [usage documentation](https://nf-co.re/rangeland/docs/usage)", "description": "Root directory of all satellite imagery.", - "mimetype": "application/x-tar" + "mimetype": "application/x-tar", + "format": "path" }, "input_tar": { "type": "boolean", @@ -29,7 +30,8 @@ "type": "string", "help_text": "Path to directory containing a subdirectory with tile-wise digital elevation files (`.tif`) and a virtual dataset file (`.vrt` file) comprising all tile-wise files from the subdirectory.", "fa_icon": "fas fa-mountain", - "description": "Digital elevation model." + "description": "Digital elevation model.", + "format": "path" }, "dem_tar": { "type": "boolean", @@ -41,7 +43,8 @@ "type": "string", "fa_icon": "fas fa-burn", "description": "Water vapor dataset.", - "help_text": "Directory containing a number text files describing global water vapor data at different timestamps, and a coordinate order (`.coo`-)file containing the reference system of the water vapor data." + "help_text": "Directory containing a number text files describing global water vapor data at different timestamps, and a coordinate order (`.coo`-)file containing the reference system of the water vapor data.", + "format": "path" }, "wvdb_tar": { "type": "boolean", @@ -53,19 +56,26 @@ "type": "string", "description": "Datacube definition.", "fa_icon": "fas fa-cube", - "help_text": "A single `.prj` file describing the projection and reference grid of the generated datacube." + "help_text": "A single `.prj` file describing the projection and reference grid of the generated datacube.", + "pattern": "^\\S+\\.prj$", + "format": "file-path" }, "aoi": { "type": "string", "fa_icon": "fas fa-chart-area", "description": "Area of interest.", - "help_text": "A single vector file specifying the spatial extend of the targeted area." + "help_text": "A single vector file specifying the spatial extend of the targeted area.", + "pattern": "^\\S+\\.(gpkg|shp)$", + "format": "file-path" }, "endmember": { "type": "string", "fa_icon": "fas fa-chart-line", "description": "Endmember definition.", - "help_text": "A single text file specifying where rows correspond to satellite bands and columns correspond to endmembers. Values correspond to reflectance values and are separated by spaces." + "help_text": "A single text file specifying where rows correspond to satellite bands and columns correspond to endmembers. Values correspond to reflectance values and are separated by spaces.", + "pattern": "^\\S+\\.txt$", + "format": "file-path", + "mimetype": "text/plain" }, "outdir": { "type": "string", @@ -99,21 +109,24 @@ "default": "LND04 LND05 LND07", "fa_icon": "fas fa-satellite", "description": "Satellites for which data should be incorporated into higher level processing.", - "help_text": "String containing space-separated indicators of satellites in FORCE level 2 format. Common options:\n\"LND04\": 6-band Landsat 4 TM, \n\"LND05\": 6-band Landsat 5 TM, \n\"LND07\": 6-band Landsat 7 ETM+,\n\"LND08/09\": 6-band Landsat 8-9 OLI, \n\"SEN2A\": 10-band Sentinel-2A, \n\"SEN2B\": 10-band Sentinel-2B,\nall options [here](https://force-eo.readthedocs.io/en/latest/components/higher-level/tsa/param.html) \n" + "help_text": "String containing space-separated indicators of satellites in FORCE level 2 format. Common options:\n\"LND04\": 6-band Landsat 4 TM, \n\"LND05\": 6-band Landsat 5 TM, \n\"LND07\": 6-band Landsat 7 ETM+,\n\"LND08/09\": 6-band Landsat 8-9 OLI, \n\"SEN2A\": 10-band Sentinel-2A, \n\"SEN2B\": 10-band Sentinel-2B,\nall options [here](https://force-eo.readthedocs.io/en/latest/components/higher-level/tsa/param.html) \n", + "pattern": "^((LND04|LND05|LND07|LND08|LND09|SEN2A|SEN2B|sen2a|sen2b|S1AIA|S1BIA|S1AID|S1BID|MOD01|MOD02|LNDLG|SEN2L|SEN2H|R-G-B|VVVHP|MODIS)(\\s|$))+$" }, "start_date": { "type": "string", "default": "1984-01-01", "fa_icon": "far fa-calendar-alt", "description": "First day of interest.", - "help_text": "String with format: \"YYYY-MM-DD\"." + "help_text": "String with format: \"YYYY-MM-DD\".", + "pattern": "^\\d{4}-\\d{2}-\\d{2}$" }, "end_date": { "type": "string", "default": "2006-12-31", "fa_icon": "far fa-calendar-alt", "description": "Last day of interest.", - "help_text": "String with format: \"YYYY-MM-DD\"." + "help_text": "String with format: \"YYYY-MM-DD\".", + "pattern": "^\\d{4}-\\d{2}-\\d{2}$" }, "resolution": { "type": "integer", @@ -134,7 +147,8 @@ "default": "NDVI BLUE GREEN RED NIR SWIR1 SWIR2", "help_text": "Space-separated list of indexes and bands that should be considered in time series analyses. They are indicated by using their established abbreviations. The full list of available indexes is available at https://force-eo.readthedocs.io/en/latest/components/higher-level/tsa/param.html under the 'INDEX' parameter. Spectral unmixing is a special index and always activated.", "description": "Select which bands and indexes should be considered in time series analyses.", - "fa_icon": "fas fa-satellite" + "fa_icon": "fas fa-satellite", + "pattern": "((BLUE|GREEN|RED|NIR|SWIR1|SWIR2|RE1|RE2|RE3|BNIR|NDVI|EVI|NBR|NDTI|ARVI|SAVI|SARVI|TC-BRIGHT|TC-GREEN|TC-WET|TC-DI|NDBI|NDWI|MNDWI|NDMI|NDSI|SMA|kNDVI|NDRE1|NDRE2|CIre|NDVIre1|NDVIre2|NDVIre3|NDVIre1n|NDVIre2n|NDVIre3n|MSRre|MSRren,CCI)(\\s|$))+" }, "return_tss": { "type": "boolean", @@ -207,7 +221,8 @@ "type": "integer", "default": 2, "description": "Number of threads spawned by FORCE for each higher-level or preprocessing task.", - "fa_icon": "fas fa-microchip" + "fa_icon": "fas fa-microchip", + "minimum": 1 } }, "fa_icon": "fas fa-terminal", From 980347ffa88005da5f62751ed42d666ca098ad39 Mon Sep 17 00:00:00 2001 From: Felix Kummer Date: Wed, 18 Sep 2024 16:03:33 +0200 Subject: [PATCH 15/38] Improved output documentation for tss files --- docs/output.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/output.md b/docs/output.md index 93eb93c..00ba296 100644 --- a/docs/output.md +++ b/docs/output.md @@ -97,6 +97,7 @@ Note that the `.tif` files are only published when the `--save_ard` parameter is - `higher-level//` - `param_files/`: Parameter files used in [force-higher-level](https://force-eo.readthedocs.io/en/latest/components/higher-level/index.html). - `trend_files/`: Symlinks to trend files that are the result of higher-level processing. + This may optionally contain the time series stack. @@ -113,9 +114,10 @@ Next, time series analysis for different vegetation characteristics is performed The resulting trend files in `trend_files/` can be investigated to view trends for individual tiles. However, these files are only published if the `--save_tsa` parameter is set to `true`. -If the `--return_tss` parameter was set to `true`, the pipeline will also output files with the `TSS` ending. +If the `--return_tss` parameter was set to `true`, the pipeline will also output `.tif` files with the `TSS` in their name. These files contain the time series stack(TSS) for the given tile and index or band. Here, for each date of acquisition, an image is available that contains the values for that date. +TSS files will not be returned if `--save_tsa` is set to `false`. ### Visualization From e036cb30ad292f993c1bae1161481c6ef7ee1c01 Mon Sep 17 00:00:00 2001 From: Felix Kummer Date: Wed, 18 Sep 2024 16:25:20 +0200 Subject: [PATCH 16/38] Added date format to date parameters --- nextflow_schema.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 26dad4a..c15af33 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -118,7 +118,8 @@ "fa_icon": "far fa-calendar-alt", "description": "First day of interest.", "help_text": "String with format: \"YYYY-MM-DD\".", - "pattern": "^\\d{4}-\\d{2}-\\d{2}$" + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "format": "date" }, "end_date": { "type": "string", @@ -126,7 +127,8 @@ "fa_icon": "far fa-calendar-alt", "description": "Last day of interest.", "help_text": "String with format: \"YYYY-MM-DD\".", - "pattern": "^\\d{4}-\\d{2}-\\d{2}$" + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "format": "date" }, "resolution": { "type": "integer", From 7564dd6affa928b68ee74bde053483fe4fd8f1b1 Mon Sep 17 00:00:00 2001 From: Felix Kummer Date: Wed, 18 Sep 2024 16:32:28 +0200 Subject: [PATCH 17/38] Removed deprecated docker parameter --- nextflow.config | 1 - 1 file changed, 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index 2aacdca..2136a94 100644 --- a/nextflow.config +++ b/nextflow.config @@ -130,7 +130,6 @@ profiles { } docker { docker.enabled = true - docker.userEmulation = true conda.enabled = false singularity.enabled = false podman.enabled = false From cd5fb92e047bd30051606d57845c217e9376c9da Mon Sep 17 00:00:00 2001 From: Felix Kummer Date: Thu, 19 Sep 2024 11:40:27 +0200 Subject: [PATCH 18/38] Added tags to all modules --- modules/local/check_results/main.nf | 1 + modules/local/check_results_full/main.nf | 1 + modules/local/force-generate_analysis_mask/main.nf | 1 + modules/local/force-generate_tile_allow_list/main.nf | 1 + 4 files changed, 4 insertions(+) diff --git a/modules/local/check_results/main.nf b/modules/local/check_results/main.nf index 4b1e14c..def8337 100644 --- a/modules/local/check_results/main.nf +++ b/modules/local/check_results/main.nf @@ -1,4 +1,5 @@ process CHECK_RESULTS { + tag 'check' label 'process_low' container 'docker.io/rocker/geospatial:4.3.1' diff --git a/modules/local/check_results_full/main.nf b/modules/local/check_results_full/main.nf index a4c4898..f1f094b 100644 --- a/modules/local/check_results_full/main.nf +++ b/modules/local/check_results_full/main.nf @@ -1,4 +1,5 @@ process CHECK_RESULTS_FULL { + tag 'check' label 'process_low' container 'docker.io/rocker/geospatial:4.3.1' diff --git a/modules/local/force-generate_analysis_mask/main.nf b/modules/local/force-generate_analysis_mask/main.nf index b9297fe..0460853 100644 --- a/modules/local/force-generate_analysis_mask/main.nf +++ b/modules/local/force-generate_analysis_mask/main.nf @@ -1,4 +1,5 @@ process FORCE_GENERATE_ANALYSIS_MASK{ + tag { aoi.simpleName } label 'process_single' container "docker.io/davidfrantz/force:3.7.10" diff --git a/modules/local/force-generate_tile_allow_list/main.nf b/modules/local/force-generate_tile_allow_list/main.nf index fa1210c..6125e47 100644 --- a/modules/local/force-generate_tile_allow_list/main.nf +++ b/modules/local/force-generate_tile_allow_list/main.nf @@ -1,4 +1,5 @@ process FORCE_GENERATE_TILE_ALLOW_LIST{ + tag { aoi.simpleName } label 'process_single' container "docker.io/davidfrantz/force:3.7.10" From f12f0c9b5ddf5c6e30841e265f850a5b6bec0ccd Mon Sep 17 00:00:00 2001 From: Felix Kummer Date: Thu, 26 Sep 2024 09:26:54 +0200 Subject: [PATCH 19/38] Removed restrictions on FORCE thread numbers and corresponding parameter --- docs/usage.md | 14 ------------- modules/local/force-higher_level/main.nf | 2 +- .../local/higher_level_force_config/main.nf | 8 +------- modules/local/preprocess_force_config/main.nf | 1 - nextflow.config | 3 --- nextflow_schema.json | 20 ------------------- 6 files changed, 2 insertions(+), 46 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index 06ce2fd..0244faa 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -331,20 +331,6 @@ The visualizations can be enabled using: --pyramid_visualization = '[boolean]' ``` -### FORCE configuration - -FORCE supports parallel computations. -Users can specify the number of threads FORCE can spawn for a single preprocessing, or higher level processing process. -This is achieved through the `--force_threads` parameter. - -The number of threads can be passed using: - -```bash ---force_threads '[integer]' -``` - -The default value is 2. - ### Intermediate data publishing By default, preprocessing and higher level processing steps do not publish the `.tif` files that they generate to avoid bloating the available storage. diff --git a/modules/local/force-higher_level/main.nf b/modules/local/force-higher_level/main.nf index 6648195..f174453 100644 --- a/modules/local/force-higher_level/main.nf +++ b/modules/local/force-higher_level/main.nf @@ -21,7 +21,7 @@ process FORCE_HIGHER_LEVEL { mkdir trend - # set provenance + # set provenance directory mkdir prov sed -i "/^DIR_PROVENANCE /c\\DIR_PROVENANCE = prov/" \$PARAM diff --git a/modules/local/higher_level_force_config/main.nf b/modules/local/higher_level_force_config/main.nf index 5b8b9b6..8e7a42b 100644 --- a/modules/local/higher_level_force_config/main.nf +++ b/modules/local/higher_level_force_config/main.nf @@ -25,19 +25,13 @@ process HIGHER_LEVEL_CONFIG { # set parameters - #Replace pathes + # Replace paths sed -i "/^DIR_LOWER /c\\DIR_LOWER = ard/" \$PARAM sed -i "/^DIR_HIGHER /c\\DIR_HIGHER = trend/" \$PARAM sed -i "/^DIR_MASK /c\\DIR_MASK = mask/" \$PARAM sed -i "/^BASE_MASK /c\\BASE_MASK = aoi.tif" \$PARAM sed -i "/^FILE_ENDMEM /c\\FILE_ENDMEM = $endmember" \$PARAM - # threading - sed -i "/^NTHREAD_READ /c\\NTHREAD_READ = 1" \$PARAM # might need some modification - sed -i "/^NTHREAD_COMPUTE /c\\NTHREAD_COMPUTE = $params.force_threads" \$PARAM # might need some modification - sed -i "/^NTHREAD_WRITE /c\\NTHREAD_WRITE = 1" \$PARAM # might need some modification - - # replace Tile to process TILE="$tile" X=\${TILE:1:4} diff --git a/modules/local/preprocess_force_config/main.nf b/modules/local/preprocess_force_config/main.nf index 8a5a67b..ff30e9c 100644 --- a/modules/local/preprocess_force_config/main.nf +++ b/modules/local/preprocess_force_config/main.nf @@ -47,7 +47,6 @@ process PREPROCESS_CONFIG { sed -i "/^ORIGIN_LON /c\\ORIGIN_LON = \$ORIGINX" \$PARAM sed -i "/^ORIGIN_LAT /c\\ORIGIN_LAT = \$ORIGINY" \$PARAM sed -i "/^PROJECTION /c\\PROJECTION = \$CRS" \$PARAM - sed -i "/^NTHREAD /c\\NTHREAD = $params.force_threads" \$PARAM cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/nextflow.config b/nextflow.config index 2136a94..940ca41 100644 --- a/nextflow.config +++ b/nextflow.config @@ -32,9 +32,6 @@ params { save_ard = false save_tsa = false - // FORCE - force_threads = 2 - // Higher Level processing configuration indexes = "NDVI BLUE GREEN RED NIR SWIR1 SWIR2" return_tss = false diff --git a/nextflow_schema.json b/nextflow_schema.json index c15af33..c1f7d19 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -213,23 +213,6 @@ "help_text": "You can savely use the defaults.", "fa_icon": "fas fa-project-diagram" }, - "force_parameters": { - "title": "FORCE parameters", - "type": "object", - "description": "Parameters specific to the FORCE tool.", - "default": "", - "properties": { - "force_threads": { - "type": "integer", - "default": 2, - "description": "Number of threads spawned by FORCE for each higher-level or preprocessing task.", - "fa_icon": "fas fa-microchip", - "minimum": 1 - } - }, - "fa_icon": "fas fa-terminal", - "help_text": "" - }, "institutional_config_options": { "title": "Institutional config options", "type": "object", @@ -448,9 +431,6 @@ { "$ref": "#/definitions/workflow_configuration" }, - { - "$ref": "#/definitions/force_parameters" - }, { "$ref": "#/definitions/institutional_config_options" }, From 7f7805b20ef109326d306cb8e1b54864d58f4dca Mon Sep 17 00:00:00 2001 From: Felix Kummer Date: Thu, 26 Sep 2024 10:55:47 +0200 Subject: [PATCH 20/38] Replaced usage of params in modules and subworkflows with channels --- .../force-generate_analysis_mask/main.nf | 3 ++- .../local/higher_level_force_config/main.nf | 16 +++++++++---- subworkflows/local/higher_level.nf | 24 ++++++++++++++++--- subworkflows/local/preprocessing.nf | 8 ++++--- workflows/rangeland.nf | 24 +++++++++++++++++-- 5 files changed, 61 insertions(+), 14 deletions(-) diff --git a/modules/local/force-generate_analysis_mask/main.nf b/modules/local/force-generate_analysis_mask/main.nf index 0460853..fdaa5a9 100644 --- a/modules/local/force-generate_analysis_mask/main.nf +++ b/modules/local/force-generate_analysis_mask/main.nf @@ -7,6 +7,7 @@ process FORCE_GENERATE_ANALYSIS_MASK{ input: path aoi path 'mask/datacube-definition.prj' + val resolution output: //Mask for whole region @@ -18,7 +19,7 @@ process FORCE_GENERATE_ANALYSIS_MASK{ script: """ - force-cube -o mask/ -s $params.resolution $aoi + force-cube -o mask/ -s $resolution $aoi cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/local/higher_level_force_config/main.nf b/modules/local/higher_level_force_config/main.nf index 8e7a42b..dbcc9fe 100644 --- a/modules/local/higher_level_force_config/main.nf +++ b/modules/local/higher_level_force_config/main.nf @@ -9,6 +9,12 @@ process HIGHER_LEVEL_CONFIG { tuple val(tile), path("ard/${tile}/*"), path("ard/${tile}/*"), path("mask/${tile}/aoi.tif") path 'ard/datacube-definition.prj' path endmember + val resolution + val sensors_level2 + val start_date + val end_date + val indexes + val return_tss output: tuple val (tile), path("trend_${tile}.prm"), path("ard/", includeInputs: true), path("mask/", includeInputs: true), path('ard/datacube-definition.prj', includeInputs: true), path(endmember, includeInputs: true), emit: higher_level_configs_and_data @@ -40,20 +46,20 @@ process HIGHER_LEVEL_CONFIG { sed -i "/^Y_TILE_RANGE /c\\Y_TILE_RANGE = \$Y \$Y" \$PARAM # resolution - sed -i "/^RESOLUTION /c\\RESOLUTION = $params.resolution" \$PARAM + sed -i "/^RESOLUTION /c\\RESOLUTION = $resolution" \$PARAM # sensors - sed -i "/^SENSORS /c\\SENSORS = $params.sensors_level2" \$PARAM + sed -i "/^SENSORS /c\\SENSORS = $sensors_level2" \$PARAM # date range - sed -i "/^DATE_RANGE /c\\DATE_RANGE = $params.start_date $params.end_date" \$PARAM + sed -i "/^DATE_RANGE /c\\DATE_RANGE = $start_date $end_date" \$PARAM # spectral index - sed -i "/^INDEX /c\\INDEX = SMA $params.indexes" \$PARAM - ${ params.return_tss ? 'sed -i "/^OUTPUT_TSS /c\\OUTPUT_TSS = TRUE" \$PARAM' : '' } + sed -i "/^INDEX /c\\INDEX = SMA $indexes" \$PARAM + ${ return_tss ? 'sed -i "/^OUTPUT_TSS /c\\OUTPUT_TSS = TRUE" \$PARAM' : '' } # interpolation sed -i "/^INT_DAY /c\\INT_DAY = 8" \$PARAM diff --git a/subworkflows/local/higher_level.nf b/subworkflows/local/higher_level.nf index 9cb44b4..ecaa94e 100644 --- a/subworkflows/local/higher_level.nf +++ b/subworkflows/local/higher_level.nf @@ -9,13 +9,31 @@ workflow HIGHER_LEVEL { tiles_and_masks cube_file endmember_file + mosaic_visualization + pyramid_visualization + resolution + sensors_level2 + start_date + end_date + indexes + return_tss main: ch_versions = Channel.empty() // create configuration file for higher level processing - HIGHER_LEVEL_CONFIG( tiles_and_masks, cube_file, endmember_file ) + HIGHER_LEVEL_CONFIG ( + tiles_and_masks, + cube_file, + endmember_file, + resolution, + sensors_level2, + start_date, + end_date, + indexes, + return_tss + ) ch_versions = ch_versions.mix(HIGHER_LEVEL_CONFIG.out.versions.first()) // main processing @@ -28,13 +46,13 @@ workflow HIGHER_LEVEL { // visualizations mosaic_files = Channel.empty() - if (params.mosaic_visualization) { + if (mosaic_visualization) { FORCE_MOSAIC( trend_files_mosaic, cube_file ) mosaic_files = FORCE_MOSAIC.out.trend_files ch_versions = ch_versions.mix(FORCE_MOSAIC.out.versions.first()) } - if (params.pyramid_visualization) { + if (pyramid_visualization) { FORCE_PYRAMID( trend_files.filter { it[1].name.endsWith('.tif') }.map { [ it[1].simpleName.substring(0,11), it[1] ] } .groupTuple() ) ch_versions = ch_versions.mix(FORCE_PYRAMID.out.versions.first()) } diff --git a/subworkflows/local/preprocessing.nf b/subworkflows/local/preprocessing.nf index 63ef11d..0ea00d2 100644 --- a/subworkflows/local/preprocessing.nf +++ b/subworkflows/local/preprocessing.nf @@ -15,6 +15,8 @@ workflow PREPROCESSING { wvdb cube_file aoi_file + group_size + resolution main: @@ -23,7 +25,7 @@ workflow PREPROCESSING { FORCE_GENERATE_TILE_ALLOW_LIST( aoi_file, cube_file ) ch_versions = ch_versions.mix(FORCE_GENERATE_TILE_ALLOW_LIST.out.versions) - FORCE_GENERATE_ANALYSIS_MASK( aoi_file, cube_file ) + FORCE_GENERATE_ANALYSIS_MASK( aoi_file, cube_file, resolution ) ch_versions = ch_versions.mix(FORCE_GENERATE_ANALYSIS_MASK.out.versions) //Group masks by tile @@ -47,14 +49,14 @@ workflow PREPROCESSING { //Sort to ensure the same groups if you use resume .toSortedList{ a,b -> a[1][0].simpleName <=> b[1][0].simpleName } .flatMap{it} - .groupTuple( remainder : true, size : params.group_size ).map{ [ it[0], it[1] .flatten() ] } + .groupTuple( remainder : true, size : group_size ).map{ [ it[0], it[1] .flatten() ] } qai_tiles_to_merge = qai_tiles.filter{ x -> x[1].size() > 1 } .map{ [ it[0].substring( 0, 11 ), it[1] ] } //Sort to ensure the same groups if you use resume .toSortedList{ a,b -> a[1][0].simpleName <=> b[1][0].simpleName } .flatMap{it} - .groupTuple( remainder : true, size : params.group_size ).map{ [ it[0], it[1] .flatten() ] } + .groupTuple( remainder : true, size : group_size ).map{ [ it[0], it[1] .flatten() ] } //Find tiles with only one file boa_tiles_done = boa_tiles.filter{ x -> x[1].size() == 1 }.map{ x -> [ x[0] .substring( 0, 11 ), x[1][0] ] } diff --git a/workflows/rangeland.nf b/workflows/rangeland.nf index b3bb782..a83866e 100644 --- a/workflows/rangeland.nf +++ b/workflows/rangeland.nf @@ -118,13 +118,33 @@ workflow RANGELAND { // // SUBWORKFLOW: Preprocess satellite imagery // - PREPROCESSING(data, dem, wvdb, cube_file, aoi_file) + PREPROCESSING ( + data, + dem, + wvdb, + cube_file, + aoi_file, + params.group_size, + params.resolution + ) ch_versions = ch_versions.mix(PREPROCESSING.out.versions) // // SUBWORKFLOW: Generate trend files and visualization // - HIGHER_LEVEL(PREPROCESSING.out.tiles_and_masks, cube_file, endmember_file) + HIGHER_LEVEL( + PREPROCESSING.out.tiles_and_masks, + cube_file, + endmember_file, + params.mosaic_visualization, + params.pyramid_visualization, + params.resolution, + params.sensors_level2, + params.start_date, + params.end_date, + params.indexes, + params.return_tss + ) ch_versions = ch_versions.mix(HIGHER_LEVEL.out.versions) grouped_trend_data = HIGHER_LEVEL.out.mosaic_files.map{ it[1] }.flatten().buffer( size: Integer.MAX_VALUE, remainder: true ) From fd096713ae791538015a975edbc9eeade1606001 Mon Sep 17 00:00:00 2001 From: Felix Kummer Date: Thu, 26 Sep 2024 11:18:17 +0200 Subject: [PATCH 21/38] Added more output channels to the top level workflow --- main.nf | 4 ++++ subworkflows/local/higher_level.nf | 6 +++++- workflows/rangeland.nf | 6 +++++- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/main.nf b/main.nf index d1877fd..f67e3ea 100644 --- a/main.nf +++ b/main.nf @@ -40,6 +40,10 @@ workflow NFCORE_RANGELAND { RANGELAND () emit: + level2_ard = RANGELAND.out.level2_ard + mosaic = RANGELAND.out.mosaic + pyramid = RANGELAND.out.pyramid + trends = RANGELAND.out.trends multiqc_report = RANGELAND.out.multiqc_report // channel: /path/to/multiqc_report.html } diff --git a/subworkflows/local/higher_level.nf b/subworkflows/local/higher_level.nf index ecaa94e..2feda82 100644 --- a/subworkflows/local/higher_level.nf +++ b/subworkflows/local/higher_level.nf @@ -52,12 +52,16 @@ workflow HIGHER_LEVEL { ch_versions = ch_versions.mix(FORCE_MOSAIC.out.versions.first()) } + pyramid_files = Channel.empty() if (pyramid_visualization) { FORCE_PYRAMID( trend_files.filter { it[1].name.endsWith('.tif') }.map { [ it[1].simpleName.substring(0,11), it[1] ] } .groupTuple() ) + pyramid_files = FORCE_PYRAMID.out.trends ch_versions = ch_versions.mix(FORCE_PYRAMID.out.versions.first()) } emit: - mosaic_files + mosaic = mosaic_files + pyramid = pyramid_files + trends = FORCE_HIGHER_LEVEL.out.trend_files versions = ch_versions } diff --git a/workflows/rangeland.nf b/workflows/rangeland.nf index a83866e..469e641 100644 --- a/workflows/rangeland.nf +++ b/workflows/rangeland.nf @@ -147,7 +147,7 @@ workflow RANGELAND { ) ch_versions = ch_versions.mix(HIGHER_LEVEL.out.versions) - grouped_trend_data = HIGHER_LEVEL.out.mosaic_files.map{ it[1] }.flatten().buffer( size: Integer.MAX_VALUE, remainder: true ) + grouped_trend_data = HIGHER_LEVEL.out.mosaic.map{ it[1] }.flatten().buffer( size: Integer.MAX_VALUE, remainder: true ) // // MODULE: Check results @@ -226,6 +226,10 @@ workflow RANGELAND { ) emit: + level2_ard = PREPROCESSING.out.tiles_and_masks + mosaic = HIGHER_LEVEL.out.mosaic + pyramid = HIGHER_LEVEL.out.pyramid + trends = HIGHER_LEVEL.out.trends multiqc_report = MULTIQC.out.report.toList() // channel: /path/to/multiqc_report.html versions = ch_versions // channel: [ path(versions.yml) ] } From a4d2e7fb699001a8b55974f9f23071fa0756a3e1 Mon Sep 17 00:00:00 2001 From: Felix Kummer Date: Sat, 28 Sep 2024 09:07:49 +0200 Subject: [PATCH 22/38] Added automatic tarball extraction for input parameters --- conf/test.config | 4 --- conf/test_full.config | 4 --- docs/output.md | 5 +-- docs/usage.md | 20 ++++++----- nextflow.config | 4 --- nextflow_schema.json | 26 +++------------ workflows/rangeland.nf | 76 ++++++++++++++++++++++++++---------------- 7 files changed, 67 insertions(+), 72 deletions(-) diff --git a/conf/test.config b/conf/test.config index d8b1d47..1c59bed 100644 --- a/conf/test.config +++ b/conf/test.config @@ -24,10 +24,6 @@ params { dem = 'https://github.com/nf-core/test-datasets/raw/rangeland/dem/dem.tar.gz' wvdb = 'https://github.com/nf-core/test-datasets/raw/rangeland/wvp/wvdb.tar.gz' - input_tar = true - dem_tar = true - wvdb_tar = true - data_cube = 'https://github.com/nf-core/test-datasets/raw/rangeland/datacube/datacube-definition.prj' aoi = 'https://github.com/nf-core/test-datasets/raw/rangeland/vector/aoi.gpkg' endmember = 'https://github.com/nf-core/test-datasets/raw/rangeland/endmember/hostert-2003.txt' diff --git a/conf/test_full.config b/conf/test_full.config index b963c70..4146ca8 100644 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -19,10 +19,6 @@ params { dem = 's3://ngi-igenomes/test-data/rangeland/dem.tar' wvdb = 's3://ngi-igenomes/test-data/rangeland/wvdb.tar' - input_tar = true - dem_tar = true - wvdb_tar = true - data_cube = 's3://ngi-igenomes/test-data/rangeland/datacube-definition.prj' aoi = 's3://ngi-igenomes/test-data/rangeland/aoi.gpkg' endmember = 's3://ngi-igenomes/test-data/rangeland/hostert-2003.txt' diff --git a/docs/output.md b/docs/output.md index 00ba296..cc7f24d 100644 --- a/docs/output.md +++ b/docs/output.md @@ -39,8 +39,9 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d [untar](https://nf-co.re/modules/untar) is a nf-core module used to extract files from tar archives. -Invocation of untar depends on certain parameters (i.e `--input_tar`, `--dem_tar` and `--wvdb_tar`). -Thus, the outputs files are only generated when these are set to `true`. +[untar](https://nf-co.re/modules/untar) is automatically executed when certain input parameters where given as `.tar` or `.tar.gz` files. +The parameters `--input`, `--dem` and `--wvdb` are supported. +See [Usage](usage.md) for details. ### Preparation diff --git a/docs/usage.md b/docs/usage.md index 0244faa..fba531c 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -106,9 +106,10 @@ The satellite imagery can be given to the pipeline using: --input '[path to imagery root]' ``` -The satellite imagery can also be provide as a tar archive. -In this case it is mandatory to set `--input_tar` to `true`. -Moreover, within the tar archive, the structure explained above has to be in place. +The satellite imagery can also be provide as a tarball (`.tar` or `.tar.gz` files). +These files will be automatically extracted. +Providing tarballs can be specifically helpful when using foreign files as inputs. +In this case, it is mandatory to have the structure explained above in place. In the example above `181036/` and `181035/` would need to be in the top level of the archive. ### Digital Elevation Model (DEM) @@ -134,9 +135,10 @@ The DEM can be given to the pipeline using: --dem '[path to dem root]' ``` -The digital elevation model can also be provide as a tar archive. -In this case it is mandatory to set `--dem_tar` to `true`. -Moreover, within the tar archive, the structure explained above has to be in place. +The digital elevation model can also be provide as a tarball (`.tar` or `.tar.gz` files). +These files will be automatically extracted. +Providing tarballs can be specifically helpful when using foreign files as inputs. +In this case, it is mandatory to have the structure explained above in place. In the example above `.vrt` and `/` would need to be in the top level of the archive. ### Water Vapor Database (WVDB) @@ -160,8 +162,10 @@ The WVDB can be given to the pipeline using: --wvdb '[path to wvdb dir]' ``` -The water vapor database can also be provide as a tar archive. -In this case it is mandatory to set `--wvdb_tar` to `true`. +The water vapor database can also be provide as a tarball (`.tar` or `.tar.gz` files). +These files will be automatically extracted. +Providing tarballs can be specifically helpful when using foreign files as inputs. +In this case, it is mandatory to have the structure explained above in place. All files of the wvdb would need to be in the top level of the archive. ### Datacube diff --git a/nextflow.config b/nextflow.config index 940ca41..dae1f35 100644 --- a/nextflow.config +++ b/nextflow.config @@ -17,10 +17,6 @@ params { aoi = null endmember = null - input_tar = false - dem_tar = false - wvdb_tar = false - // Remote sensing imagery parameters sensors_level2 = "LND04 LND05 LND07" resolution = 30 diff --git a/nextflow_schema.json b/nextflow_schema.json index c1f7d19..90772e3 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -15,43 +15,25 @@ "input": { "type": "string", "fa_icon": "fas fa-satellite", - "help_text": "Set this to the root directory of all satellite imagery. Directory structure should match format of data downloaded with '$ force-level1-csd\n' For concrete directory structure see [usage documentation](https://nf-co.re/rangeland/docs/usage)", - "description": "Root directory of all satellite imagery.", + "help_text": "Set this to the root directory of all satellite imagery. Directory structure should match format of data downloaded with '$ force-level1-csd\n' For concrete directory structure see [usage documentation](https://nf-co.re/rangeland/docs/usage).\n\nAlternatively, a tarball can be supplied. The same directory structure needs to be in place in that tarball.", + "description": "Root directory or tarball of all satellite imagery.", "mimetype": "application/x-tar", "format": "path" }, - "input_tar": { - "type": "boolean", - "fa_icon": "fas fa-archive", - "description": "Indicates whether `input` is a tar archive.", - "help_text": "Set to `true` if `input` is a tar archive. The workflow will extract it then." - }, "dem": { "type": "string", - "help_text": "Path to directory containing a subdirectory with tile-wise digital elevation files (`.tif`) and a virtual dataset file (`.vrt` file) comprising all tile-wise files from the subdirectory.", + "help_text": "Path to directory containing a subdirectory with tile-wise digital elevation files (`.tif`) and a virtual dataset file (`.vrt` file) comprising all tile-wise files from the subdirectory. See [usage documentation](https://nf-co.re/rangeland/docs/usage) for details regarding the required structure.\n\nAlternatively, a tarball can be supplied. The same directory structure needs to be in place in that tarball.\n\nAlternatively, a tarball can be supplied. The same directory structure needs to be in place in that tarball.", "fa_icon": "fas fa-mountain", "description": "Digital elevation model.", "format": "path" }, - "dem_tar": { - "type": "boolean", - "fa_icon": "fas fa-archive", - "description": "Indicates whether `dem` is a tar archive.", - "help_text": "Set to `true` if `dem` is a tar archive. The workflow will extract it then." - }, "wvdb": { "type": "string", "fa_icon": "fas fa-burn", "description": "Water vapor dataset.", - "help_text": "Directory containing a number text files describing global water vapor data at different timestamps, and a coordinate order (`.coo`-)file containing the reference system of the water vapor data.", + "help_text": "Directory containing a number text files describing global water vapor data at different timestamps, and a coordinate order (`.coo`-)file containing the reference system of the water vapor data. See [usage documentation](https://nf-co.re/rangeland/docs/usage) for details regarding the required structure.\n\nAlternatively, a tarball can be supplied. The same directory structure needs to be in place in that tarball.", "format": "path" }, - "wvdb_tar": { - "type": "boolean", - "fa_icon": "fas fa-archive", - "description": "Indicates whether `wvdb` is a tar archive.", - "help_text": "Set to `true` if `wvdb` is a tar archive. The workflow will extract it then." - }, "data_cube": { "type": "string", "description": "Datacube definition.", diff --git a/workflows/rangeland.nf b/workflows/rangeland.nf index 469e641..53149f1 100644 --- a/workflows/rangeland.nf +++ b/workflows/rangeland.nf @@ -67,14 +67,14 @@ workflow RANGELAND { main: - ch_versions = Channel.empty() + ch_versions = Channel.empty() ch_multiqc_files = Channel.empty() // // Stage and validate input files // - data = null - dem = null - wvdb = null + data = Channel.empty() + dem = Channel.empty() + wvdb = Channel.empty() cube_file = file( params.data_cube ) aoi_file = file( params.aoi ) endmember_file = file( params.endmember ) @@ -83,37 +83,57 @@ workflow RANGELAND { // MODULE: untar // tar_versions = Channel.empty() - if (params.input_tar) { - UNTAR_INPUT([[:], params.input]) - base_path = UNTAR_INPUT.out.untar.map(it -> it[1]) - data = base_path.map(it -> file("$it/*/*", type: 'dir')).flatten() - data = data.filter{ inRegion(it) } - - tar_versions = tar_versions.mix(UNTAR_INPUT.out.versions) - } else { - data = Channel.fromPath( "${params.input}/*/*", type: 'dir').flatten() - data = data.filter{ inRegion(it) } + // Determine type of params.input and extract when neccessary + ch_input = Channel.of(file(params.input)) + ch_input.branch { it + archives : it.name.endsWith('tar') || it.name.endsWith('tar.gz') + return tuple([:], it) + dirs: true + return it } - - if (params.dem_tar) { - UNTAR_DEM([[:], params.dem]) - dem = UNTAR_DEM.out.untar.map(it -> file(it[1])) - - tar_versions = tar_versions.mix(UNTAR_DEM.out.versions) - } else { - dem = file("$params.dem") + .set{ ch_input_types } + + UNTAR_INPUT(ch_input_types.archives) + ch_untared_inputs = UNTAR_INPUT.out.untar.map(it -> it[1]) + tar_versions = tar_versions.mix(UNTAR_INPUT.out.versions) + + data = data + .mix(ch_untared_inputs, ch_input_types.dirs) + .map(it -> file("$it/*/*", type: 'dir')).flatten() + .filter{ inRegion(it) } + + // Determine type of params.dem and extract when neccessary + ch_dem = Channel.of(file(params.dem)) + ch_dem.branch { it + archives : it.name.endsWith('tar') || it.name.endsWith('tar.gz') + return tuple([:], it) + dirs: true + return file(it) } + .set{ ch_dem_types } - if (params.wvdb_tar) { - UNTAR_WVDB([[:], params.wvdb]) - wvdb = UNTAR_WVDB.out.untar.map(it -> file(it[1])) + UNTAR_DEM(ch_dem_types.archives) + ch_untared_dem = UNTAR_DEM.out.untar.map(it -> it[1]) + tar_versions = tar_versions.mix(UNTAR_DEM.out.versions) - tar_versions = tar_versions.mix(UNTAR_WVDB.out.versions) - } else { - wvdb = file("$params.wvdb") + dem = dem.mix(ch_untared_dem, ch_dem_types.dirs).first() + + // Determine type of params.wvdb and extract when neccessary + ch_wvdb = Channel.of(file(params.wvdb)) + ch_wvdb.branch { it + archives : it.name.endsWith('tar') || it.name.endsWith('tar.gz') + return tuple([:], it) + dirs: true + return file(it) } + .set{ ch_wvdb_types } + + UNTAR_WVDB(ch_wvdb_types.archives) + ch_untared_wvdb = UNTAR_WVDB.out.untar.map(it -> it[1]) + tar_versions = tar_versions.mix(UNTAR_WVDB.out.versions) + wvdb = wvdb.mix(ch_untared_wvdb, ch_wvdb_types.dirs).first() // // SUBWORKFLOW: Preprocess satellite imagery From 99ff90908c354890e570d3ad093ed1c450b1b4bd Mon Sep 17 00:00:00 2001 From: Felix Kummer Date: Mon, 7 Oct 2024 15:42:10 +0200 Subject: [PATCH 23/38] Changed UNTAR container to its default container image --- conf/test.config | 1 - conf/test_full.config | 1 - 2 files changed, 2 deletions(-) diff --git a/conf/test.config b/conf/test.config index 1c59bed..17e3213 100644 --- a/conf/test.config +++ b/conf/test.config @@ -55,7 +55,6 @@ params { process { withName: "UNTAR_*" { - container = 'docker.io/ubuntu:23.10' ext.args2 = "--strip-components=0" } } diff --git a/conf/test_full.config b/conf/test_full.config index 4146ca8..d6851b2 100644 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -45,7 +45,6 @@ params { process { withName: "UNTAR_*" { - container = 'docker.io/ubuntu:23.10' ext.args2 = "--strip-components=1" } withName: "UNTAR_REF"{ From 605f15417ead5cdb7629bdeb103218f693002ce3 Mon Sep 17 00:00:00 2001 From: Felix Kummer Date: Fri, 11 Oct 2024 09:19:30 +0200 Subject: [PATCH 24/38] Changed force-pyramid to process a single file instead of groups of files --- modules/local/force-pyramid/main.nf | 6 ++---- subworkflows/local/higher_level.nf | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/modules/local/force-pyramid/main.nf b/modules/local/force-pyramid/main.nf index 80d430c..34bac8b 100644 --- a/modules/local/force-pyramid/main.nf +++ b/modules/local/force-pyramid/main.nf @@ -16,10 +16,8 @@ process FORCE_PYRAMID { script: """ - files="*.tif" - for file in \$files; do - force-pyramid \$file - done; + file="*.tif" + force-pyramid \$file cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/subworkflows/local/higher_level.nf b/subworkflows/local/higher_level.nf index 2feda82..1891ae0 100644 --- a/subworkflows/local/higher_level.nf +++ b/subworkflows/local/higher_level.nf @@ -54,7 +54,7 @@ workflow HIGHER_LEVEL { pyramid_files = Channel.empty() if (pyramid_visualization) { - FORCE_PYRAMID( trend_files.filter { it[1].name.endsWith('.tif') }.map { [ it[1].simpleName.substring(0,11), it[1] ] } .groupTuple() ) + FORCE_PYRAMID( trend_files.filter { it[1].name.endsWith('.tif') }.map { [ it[1].simpleName.substring(0,11), it[1] ] } ) pyramid_files = FORCE_PYRAMID.out.trends ch_versions = ch_versions.mix(FORCE_PYRAMID.out.versions.first()) } From 22166e97db3f589dcca5fa1944121dd63a9da556 Mon Sep 17 00:00:00 2001 From: Felix Kummer Date: Fri, 25 Oct 2024 09:31:15 +0200 Subject: [PATCH 25/38] Updated input mimetype in schema --- nextflow_schema.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 1c863d7..25a6c91 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -17,7 +17,7 @@ "fa_icon": "fas fa-satellite", "help_text": "Set this to the root directory of all satellite imagery. Directory structure should match format of data downloaded with '$ force-level1-csd\n' For concrete directory structure see [usage documentation](https://nf-co.re/rangeland/docs/usage).\n\nAlternatively, a tarball can be supplied. The same directory structure needs to be in place in that tarball.", "description": "Root directory or tarball of all satellite imagery.", - "mimetype": "application/x-tar", + "mimetype": "image/tiff, application/x-tar", "format": "path" }, "dem": { @@ -339,7 +339,6 @@ { "$ref": "#/$defs/input_output_options" }, - { "$ref": "#/$defs/remote_sensing_image_options" }, From c822ba7ac33c6ac4760058220ba439ab3a2fa905 Mon Sep 17 00:00:00 2001 From: Felix Kummer Date: Fri, 25 Oct 2024 11:00:19 +0200 Subject: [PATCH 26/38] Added missing fields to schema --- nextflow_schema.json | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 25a6c91..5829b02 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -15,6 +15,7 @@ "input": { "type": "string", "fa_icon": "fas fa-satellite", + "exists": true, "help_text": "Set this to the root directory of all satellite imagery. Directory structure should match format of data downloaded with '$ force-level1-csd\n' For concrete directory structure see [usage documentation](https://nf-co.re/rangeland/docs/usage).\n\nAlternatively, a tarball can be supplied. The same directory structure needs to be in place in that tarball.", "description": "Root directory or tarball of all satellite imagery.", "mimetype": "image/tiff, application/x-tar", @@ -24,12 +25,14 @@ "type": "string", "help_text": "Path to directory containing a subdirectory with tile-wise digital elevation files (`.tif`) and a virtual dataset file (`.vrt` file) comprising all tile-wise files from the subdirectory. See [usage documentation](https://nf-co.re/rangeland/docs/usage) for details regarding the required structure.\n\nAlternatively, a tarball can be supplied. The same directory structure needs to be in place in that tarball.\n\nAlternatively, a tarball can be supplied. The same directory structure needs to be in place in that tarball.", "fa_icon": "fas fa-mountain", + "exists": true, "description": "Digital elevation model.", "format": "path" }, "wvdb": { "type": "string", "fa_icon": "fas fa-burn", + "exists": true, "description": "Water vapor dataset.", "help_text": "Directory containing a number text files describing global water vapor data at different timestamps, and a coordinate order (`.coo`-)file containing the reference system of the water vapor data. See [usage documentation](https://nf-co.re/rangeland/docs/usage) for details regarding the required structure.\n\nAlternatively, a tarball can be supplied. The same directory structure needs to be in place in that tarball.", "format": "path" @@ -38,6 +41,7 @@ "type": "string", "description": "Datacube definition.", "fa_icon": "fas fa-cube", + "exists": true, "help_text": "A single `.prj` file describing the projection and reference grid of the generated datacube.", "pattern": "^\\S+\\.prj$", "format": "file-path" @@ -45,6 +49,7 @@ "aoi": { "type": "string", "fa_icon": "fas fa-chart-area", + "exists": true, "description": "Area of interest.", "help_text": "A single vector file specifying the spatial extend of the targeted area.", "pattern": "^\\S+\\.(gpkg|shp)$", @@ -53,6 +58,7 @@ "endmember": { "type": "string", "fa_icon": "fas fa-chart-line", + "exists": true, "description": "Endmember definition.", "help_text": "A single text file specifying where rows correspond to satellite bands and columns correspond to endmembers. Values correspond to reflectance values and are separated by spaces.", "pattern": "^\\S+\\.txt$", @@ -63,7 +69,8 @@ "type": "string", "format": "directory-path", "description": "The output directory where the results will be saved. You have to use absolute paths to storage on Cloud infrastructure.", - "fa_icon": "fas fa-folder-open" + "fa_icon": "fas fa-folder-open", + "exists": true }, "email": { "type": "string", @@ -116,7 +123,8 @@ "type": "integer", "default": 30, "fa_icon": "fas fa-expand-arrows-alt", - "description": "Spatial resolution applied in analyses." + "description": "Spatial resolution applied in analyses.", + "minimum": 1 } }, "fa_icon": "fas fa-satellite" From 15e4c1ecf9d79d54181043903e8627211f04c217 Mon Sep 17 00:00:00 2001 From: Felix Kummer Date: Fri, 25 Oct 2024 11:07:32 +0200 Subject: [PATCH 27/38] Updated changelog --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 69d332e..259eb81 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## v1.0.0 - [date] -Initial release of nf-core/rangeland, created with the [nf-core](https://nf-co.re/) template. +First release of `nf-core/rangeland`. +This work is a continuation, and nf-core port, of the [original version of this pipeline](https://github.com/CRC-FONDA/FORCE2NXF-Rangeland). ### `Added` From 415edb40cca6cf1e8ad203b419b472b02c7dd7cc Mon Sep 17 00:00:00 2001 From: Felix Kummer Date: Sat, 26 Oct 2024 09:53:34 +0200 Subject: [PATCH 28/38] Fixed some linter warnings --- .nf-core.yml | 1 + conf/base.config | 1 - nextflow.config | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.nf-core.yml b/.nf-core.yml index 9981b0d..d29a63f 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -2,6 +2,7 @@ bump_version: null lint: files_exist: - conf/igenomes.config + - conf/igenomes_ignored.config nf_core_version: 3.0.2 org_path: null repository_type: pipeline diff --git a/conf/base.config b/conf/base.config index 7dde9f4..cf3d991 100644 --- a/conf/base.config +++ b/conf/base.config @@ -10,7 +10,6 @@ process { - // TODO nf-core: Check the defaults for all processes cpus = { 1 * task.attempt } memory = { 6.GB * task.attempt } time = { 4.h * task.attempt } diff --git a/nextflow.config b/nextflow.config index 808a38d..eac20e6 100644 --- a/nextflow.config +++ b/nextflow.config @@ -181,7 +181,7 @@ profiles { includeConfig !System.getenv('NXF_OFFLINE') && params.custom_config_base ? "${params.custom_config_base}/nfcore_custom.config" : "/dev/null" // Load nf-core/rangeland custom profiles from different institutions. -// TODO nf-core: Optionally, you can add a pipeline-specific nf-core config at https://github.com/nf-core/configs +// nf-core: Optionally, you can add a pipeline-specific nf-core config at https://github.com/nf-core/configs includeConfig !System.getenv('NXF_OFFLINE') && params.custom_config_base ? "${params.custom_config_base}/pipeline/rangeland.config" : "/dev/null" // Set default registry for Apptainer, Docker, Podman, Charliecloud and Singularity independent of -profile From 0585e5e36c97a010e18b5c127d7b8a19c9aec549 Mon Sep 17 00:00:00 2001 From: Felix Kummer Date: Mon, 28 Oct 2024 20:02:07 +0100 Subject: [PATCH 29/38] Replaced for-loops with GNU parallel --- modules/local/force-higher_level/main.nf | 8 +++----- modules/local/force-mosaic/main.nf | 13 +++++++++---- modules/local/merge/main.nf | 20 ++++++++++++-------- 3 files changed, 24 insertions(+), 17 deletions(-) diff --git a/modules/local/force-higher_level/main.nf b/modules/local/force-higher_level/main.nf index f174453..c042cb1 100644 --- a/modules/local/force-higher_level/main.nf +++ b/modules/local/force-higher_level/main.nf @@ -25,14 +25,12 @@ process FORCE_HIGHER_LEVEL { mkdir prov sed -i "/^DIR_PROVENANCE /c\\DIR_PROVENANCE = prov/" \$PARAM - + # higher level processing force-higher-level \$PARAM - #Rename files: /trend// to _, otherwise we can not reextract the tile name later + # Rename files: /trend// to _, otherwise we can not reextract the tile name later results=`find trend -name '*.tif*'` - for path in \$results; do - mv \$path \${path%/*}_\${path##*/} - done; + parallel -j $task.cpus 'mv {} {//}_{/}' ::: \$results cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/local/force-mosaic/main.nf b/modules/local/force-mosaic/main.nf index 604df9b..a114805 100644 --- a/modules/local/force-mosaic/main.nf +++ b/modules/local/force-mosaic/main.nf @@ -17,13 +17,18 @@ process FORCE_MOSAIC{ script: """ - #Move files from trend/_ to trend// - results=`find trend/*.tif*` - for path in \$results; do + move_file() { + path=\$1 mkdir -p \${path%_$product*} mv \$path \${path%_$product*}/${product}.\${path#*.} - done; + } + export -f move_file + + # Move files from trend/_ to trend// + results=`find trend/*.tif*` + parallel -j $task.cpus move_file ::: \$results + # start mosaic computation force-mosaic trend/ cat <<-END_VERSIONS > versions.yml diff --git a/modules/local/merge/main.nf b/modules/local/merge/main.nf index 812a9de..f849269 100644 --- a/modules/local/merge/main.nf +++ b/modules/local/merge/main.nf @@ -19,19 +19,19 @@ process MERGE { script: """ + # get files to merge files=`find -L input/ -type f -printf "%f\\n" | sort | uniq` numberFiles=`echo \$files | wc -w` - currentFile=0 - for file in \$files - do - currentFile=\$((currentFile+1)) - echo "Merging \$file (\$currentFile of \$numberFiles)" + # merge function + merge() { + file=\$1 + echo "Merging \$file (\$2 of \$numberFiles)" onefile=`ls -- */*/\${file} | head -1` - - #merge together matchingFiles=`ls -- */*/\${file}` + + # merge script execution depending on file type if [ "$data_type" = "boa" ]; then merge_boa.r \$file \${matchingFiles} elif [ "$data_type" = "qai" ]; then @@ -40,8 +40,12 @@ process MERGE { #apply meta force-mdcp \$onefile \$file + } + export -f merge + export numberFiles - done; + # start merging in parallel + parallel -j $task.cpus merge {} {#} ::: \$files cat <<-END_VERSIONS > versions.yml "${task.process}": From bd82d81690adb50c996b6f072261fc1f3225b57d Mon Sep 17 00:00:00 2001 From: Felix Kummer Date: Sat, 9 Nov 2024 11:04:22 +0100 Subject: [PATCH 30/38] Migrated check result modules to nf-test --- .gitignore | 2 + conf/test.config | 14 +---- conf/test_full.config | 14 ++--- nf-test.config | 8 +++ tests/check_test_results.nf.test | 54 +++++++++++++++++++ tests/nextflow.config | 5 ++ tests_large/check_test_full_results.nf.test | 57 +++++++++++++++++++++ workflows/rangeland.nf | 34 +----------- 8 files changed, 132 insertions(+), 56 deletions(-) create mode 100644 nf-test.config create mode 100644 tests/check_test_results.nf.test create mode 100644 tests/nextflow.config create mode 100644 tests_large/check_test_full_results.nf.test diff --git a/.gitignore b/.gitignore index a42ce01..8b0033e 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,5 @@ testing/ testing* *.pyc null/ +.nf-test.log +.nf-test/* diff --git a/conf/test.config b/conf/test.config index 39e2cf6..c874060 100644 --- a/conf/test.config +++ b/conf/test.config @@ -37,23 +37,11 @@ params { sensors_level2 = 'LND04 LND05' - // Reference data - woody_change_ref = 'https://github.com/nf-core/test-datasets/raw/rangeland/reference/woody_cover_chg_ref.tif' - woody_yoc_ref = 'https://github.com/nf-core/test-datasets/raw/rangeland/reference/woody_cover_yoc_ref.tif' - - herbaceous_change_ref = 'https://github.com/nf-core/test-datasets/raw/rangeland/reference/herbaceous_cover_chg_ref.tif' - herbaceous_yoc_ref = 'https://github.com/nf-core/test-datasets/raw/rangeland/reference/herbaceous_cover_yoc_ref.tif' - - peak_change_ref = 'https://github.com/nf-core/test-datasets/raw/rangeland/reference/peak_chg_ref.tif' - peak_yoc_ref = 'https://github.com/nf-core/test-datasets/raw/rangeland/reference/peak_yoc_ref.tif' - // Other parameters group_size = 10 - // enable mosaic for result checking + // enable mosaic visualization mosaic_visualization = true - - validationSchemaIgnoreParams = "peak_yoc_ref,peak_change_ref,herbaceous_yoc_ref,herbaceous_change_ref,woody_yoc_ref,woody_change_ref" } process { diff --git a/conf/test_full.config b/conf/test_full.config index d6851b2..b2df818 100644 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -30,24 +30,16 @@ params { sensors_level2 = 'LND04 LND05' - // enable time series stack output + // Enable time series stack output return_tss = true - // enable mosaic for result checking (required for result checking) + // Enable mosaic visualization mosaic_visualization = true - - // reference data - reference = "s3://ngi-igenomes/test-data/rangeland/reference.tar" - - validationSchemaIgnoreParams = "reference" - } process { + // This is required because of the internal structure of the input tarballs withName: "UNTAR_*" { ext.args2 = "--strip-components=1" } - withName: "UNTAR_REF"{ - ext.args2 = "--strip-components=0" - } } diff --git a/nf-test.config b/nf-test.config new file mode 100644 index 0000000..a2ad2ce --- /dev/null +++ b/nf-test.config @@ -0,0 +1,8 @@ +config { + + testsDir "tests" + workDir ".nf-test" + configFile "tests/nextflow.config" + profile "docker,test" + +} diff --git a/tests/check_test_results.nf.test b/tests/check_test_results.nf.test new file mode 100644 index 0000000..27c41a6 --- /dev/null +++ b/tests/check_test_results.nf.test @@ -0,0 +1,54 @@ +// This is a pipeline level-test, not a module test, even though the main script is a module. +// The entire workflow is executed in the setup scope using the same config as the test profile. +// Afterwards, a single module is executed in the when scope to ensure that the pipeline generated correct results. + +nextflow_process { + + name "Check the correctness of the pipeline results using the test profile" + script "../modules/local/check_results/main.nf" + process "CHECK_RESULTS" + + test("Checking pipeline results for: -profile test") { + + setup { + run("NFCORE_RANGELAND") { + script "../main.nf" + workflow {} + } + + } + + when { + params { + // Reference data + woody_change_ref = 'https://github.com/nf-core/test-datasets/raw/rangeland/reference/woody_cover_chg_ref.tif' + woody_yoc_ref = 'https://github.com/nf-core/test-datasets/raw/rangeland/reference/woody_cover_yoc_ref.tif' + + herbaceous_change_ref = 'https://github.com/nf-core/test-datasets/raw/rangeland/reference/herbaceous_cover_chg_ref.tif' + herbaceous_yoc_ref = 'https://github.com/nf-core/test-datasets/raw/rangeland/reference/herbaceous_cover_yoc_ref.tif' + + peak_change_ref = 'https://github.com/nf-core/test-datasets/raw/rangeland/reference/peak_chg_ref.tif' + peak_yoc_ref = 'https://github.com/nf-core/test-datasets/raw/rangeland/reference/peak_yoc_ref.tif' + } + + process { + """ + // inputs for CHECK_RESULTS + input[0] = NFCORE_RANGELAND.out.mosaic.map{ it[1] }.flatten().buffer( size: Integer.MAX_VALUE, remainder: true ) + input[1] = file( params.woody_change_ref ) + input[2] = file( params.woody_yoc_ref ) + input[3] = file( params.herbaceous_change_ref ) + input[4] = file( params.herbaceous_yoc_ref ) + input[5] = file( params.peak_change_ref ) + input[6] = file( params.peak_yoc_ref ) + """ + } + } + + then { + assert process.success + } + + } + +} diff --git a/tests/nextflow.config b/tests/nextflow.config new file mode 100644 index 0000000..c19b1ad --- /dev/null +++ b/tests/nextflow.config @@ -0,0 +1,5 @@ +/* +======================================================================================== + Nextflow config file for running tests +======================================================================================== +*/ diff --git a/tests_large/check_test_full_results.nf.test b/tests_large/check_test_full_results.nf.test new file mode 100644 index 0000000..5ccf3e0 --- /dev/null +++ b/tests_large/check_test_full_results.nf.test @@ -0,0 +1,57 @@ +// WARNING: This test requires approximately 400GB of free disk space. +// It is excluded from default test runs due to its high resource demands. +// Run with caution. + +// This is a pipeline level-test, not a module test, even though the main script is a module. +// The entire workflow is executed in the setup scope using the same config as the test_full profile. +// Next, still within the setup scope the reference data is pulled and extracted. +// Afterwards, a single module is executed in the when scope to ensure that the pipeline generated correct results. + +nextflow_process { + + name "Check the correctness of the pipeline results using the test_full profile" + script "../modules/local/check_results_full/main.nf" + process "CHECK_RESULTS_FULL" + config "../conf/test_full.config" + + test("Checking pipeline results for: -profile test_full") { + + setup { + run("NFCORE_RANGELAND") { + script "../main.nf" + workflow {} + } + + run("UNTAR", alias: "UNTAR_REF" ) { + script "../modules/nf-core/untar/main.nf" + process { + """ + input[0] = [[:], params.reference] + """ + } + } + + } + + when { + params { + // reference data + reference = "s3://ngi-igenomes/test-data/rangeland/reference.tar" + } + + process { + """ + // inputs for CHECK_RESULTS_FULL + input[0] = NFCORE_RANGELAND.out.mosaic.map{ it[1] }.flatten().buffer( size: Integer.MAX_VALUE, remainder: true ) + input[1] = UNTAR_REF.out.untar.map(it->it[1]) + """ + } + } + + then { + assert process.success + } + + } + +} diff --git a/workflows/rangeland.nf b/workflows/rangeland.nf index 879ce00..905b9f4 100644 --- a/workflows/rangeland.nf +++ b/workflows/rangeland.nf @@ -22,12 +22,6 @@ include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_rang include { PREPROCESSING } from '../subworkflows/local/preprocessing' include { HIGHER_LEVEL } from '../subworkflows/local/higher_level' -// -// MODULES -// - -include { CHECK_RESULTS } from '../modules/local/check_results/main' -include { CHECK_RESULTS_FULL } from '../modules/local/check_results_full/main' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IMPORT NF-CORE MODULES/SUBWORKFLOWS @@ -135,6 +129,8 @@ workflow RANGELAND { wvdb = wvdb.mix(ch_untared_wvdb, ch_wvdb_types.dirs).first() + ch_versions = ch_versions.mix(tar_versions.first()) + // // SUBWORKFLOW: Preprocess satellite imagery // @@ -169,32 +165,6 @@ workflow RANGELAND { grouped_trend_data = HIGHER_LEVEL.out.mosaic.map{ it[1] }.flatten().buffer( size: Integer.MAX_VALUE, remainder: true ) - // - // MODULE: Check results - // - if (params.config_profile_name == 'Test profile') { - woody_change_ref = file( params.woody_change_ref ) - woody_yoc_ref = file( params.woody_yoc_ref ) - herbaceous_change_ref = file( params.herbaceous_change_ref ) - herbaceous_yoc_ref = file( params.herbaceous_yoc_ref ) - peak_change_ref = file( params.peak_change_ref ) - peak_yoc_ref = file( params.peak_yoc_ref ) - - CHECK_RESULTS(grouped_trend_data, woody_change_ref, woody_yoc_ref, herbaceous_change_ref, herbaceous_yoc_ref, peak_change_ref, peak_yoc_ref) - ch_versions = ch_versions.mix(CHECK_RESULTS.out.versions) - } - - if (params.config_profile_name == 'Full test profile') { - UNTAR_REF([[:], params.reference]) - ref_path = UNTAR_REF.out.untar.map(it -> it[1]) - tar_versions.mix(UNTAR_REF.out.versions) - - CHECK_RESULTS_FULL(grouped_trend_data, ref_path) - ch_versions = ch_versions.mix(CHECK_RESULTS_FULL.out.versions) - } - - ch_versions = ch_versions.mix(tar_versions.first()) - // // Collate and save software versions // From a8da0e345314bf4385a351a58d1268175671baba Mon Sep 17 00:00:00 2001 From: Felix Kummer Date: Mon, 11 Nov 2024 11:53:54 +0100 Subject: [PATCH 31/38] Added parameter to disable all output publishing --- conf/modules.config | 51 +++++++++++++++++++++++++++----------------- docs/output.md | 2 ++ docs/usage.md | 13 +++++++++++ nextflow.config | 7 +++--- nextflow_schema.json | 7 ++++++ 5 files changed, 58 insertions(+), 22 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 911dce9..d310232 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -13,16 +13,18 @@ process { publishDir = [ - path: { "${params.outdir}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + path: { "${params.outdir}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + enabled: params.publish_dir_enabled ] withName: "FORCE_GENERATE_ANALYSIS_MASK" { publishDir = [ path: { "${params.outdir}/preparation/" }, mode: params.publish_dir_mode, - pattern: '**.tif' + pattern: '**.tif', + enabled: params.publish_dir_enabled ] } @@ -30,7 +32,8 @@ process { publishDir = [ path: { "${params.outdir}/preparation/" }, pattern: '*.txt', - mode: params.publish_dir_mode + mode: params.publish_dir_mode, + enabled: params.publish_dir_enabled ] } @@ -39,13 +42,15 @@ process { [ path: { "${params.outdir}/preprocess/${task.tag}/logs" }, mode: params.publish_dir_mode, - pattern: '*.log' + pattern: '*.log', + enabled: params.publish_dir_enabled ], [ path: { "${params.outdir}/preprocess/${task.tag}" }, mode: params.publish_dir_mode, pattern: 'level2_ard/**/*', - saveAs: { params.save_ard ? it : null } + saveAs: { params.save_ard ? it : null }, + enabled: params.publish_dir_enabled ] ] } @@ -55,7 +60,8 @@ process { publishDir = [ path: { "${params.outdir}/higher-level/${task.tag}/param_files" }, mode: params.publish_dir_mode, - pattern: '*.prm' + pattern: '*.prm', + enabled: params.publish_dir_enabled ] } @@ -64,7 +70,8 @@ process { path: { "${params.outdir}/higher-level/${task.tag}" }, mode: params.publish_dir_mode, pattern: 'trend/*.tif', - saveAs: { params.save_ard ? "trend_files/${it.tokenize('/')[-1]}" : null } + saveAs: { params.save_ard ? "trend_files/${it.tokenize('/')[-1]}" : null }, + enabled: params.publish_dir_enabled ] } @@ -75,12 +82,14 @@ process { path: { "${params.outdir}/trend/pyramid/" }, saveAs: { "${it.substring(12,it.indexOf("."))}/trend/${it.substring(0,11)}/$it" }, pattern: '*.tif*', - mode: params.publish_dir_mode + mode: params.publish_dir_mode, + enabled: params.publish_dir_enabled ], [ path: { "${params.outdir}/trend/pyramid/" }, pattern: 'versions.yml', - mode: params.publish_dir_mode + mode: params.publish_dir_mode, + enabled: params.publish_dir_enabled ] ] } @@ -89,7 +98,8 @@ process { publishDir = [ path: { "${params.outdir}/trend/mosaic/" }, mode: params.publish_dir_mode, - saveAs: {"${params.outdir}/trend/mosaic/${task.tag}/${it.replaceAll("trend/","")}"} + saveAs: {"${params.outdir}/trend/mosaic/${task.tag}/${it.replaceAll("trend/","")}"}, + enabled: params.publish_dir_enabled ] } @@ -109,24 +119,27 @@ process { publishDir = [ path: { "${params.outdir}/preprocess/${task.tag}/param_files" }, mode: params.publish_dir_mode, - pattern: '*.prm' + pattern: '*.prm', + enabled: params.publish_dir_enabled ] } withName: 'MULTIQC' { ext.args = params.multiqc_title ? "--title \"$params.multiqc_title\"" : '' publishDir = [ - path: { "${params.outdir}/multiqc" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + path: { "${params.outdir}/multiqc" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + enabled: params.publish_dir_enabled ] } withName: "UNTAR_*" { publishDir = [ - path: { "${params.outdir}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" }, - mode: 'symlink', - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + path: { "${params.outdir}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" }, + mode: 'symlink', + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + enabled: params.publish_dir_enabled ] } diff --git a/docs/output.md b/docs/output.md index cc7f24d..8769c5a 100644 --- a/docs/output.md +++ b/docs/output.md @@ -7,6 +7,8 @@ This document describes the output produced by the pipeline. The directories listed below will be created in the results directory after the pipeline has finished. All paths are relative to the top-level results directory. +Note that running this pipeline with `--publish_dir_enabled false` will prevent any module from publishing its output. See [Usage](usage.md#module-output-publishing) for details + ## Pipeline overview The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes data using the following steps: diff --git a/docs/usage.md b/docs/usage.md index 623bf5d..3fb0723 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -348,6 +348,19 @@ Publishing of intermediate data can be enabled using: --save_tsa = '[boolean]' ``` +### Module output publishing + +Certain users may not be interested in the pipeline's outputs. +To disable all modules from publishing their outputs, the `--publish_dir_enabled` can be set to `false`. +Note that this affects _all modules_. +By default all modules publish their outputs according to the other parameters. + +Publishing of all module's outputs can be enabled or disabled using: + +```bash +--publish_dir_enabled = '[boolean]' +``` + ## Running the pipeline The typical command for running the pipeline is as follows: diff --git a/nextflow.config b/nextflow.config index eac20e6..8edbb7c 100644 --- a/nextflow.config +++ b/nextflow.config @@ -24,9 +24,10 @@ params { end_date = "2006-12-31" // Workflow configuration - group_size = 100 - save_ard = false - save_tsa = false + group_size = 100 + save_ard = false + save_tsa = false + publish_dir_enabled = true // Higher Level processing configuration indexes = "NDVI BLUE GREEN RED NIR SWIR1 SWIR2" diff --git a/nextflow_schema.json b/nextflow_schema.json index 5829b02..173a047 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -198,6 +198,13 @@ "description": "Batch size of tiles considered for merging.", "help_text": "Controls trade-off between parallelism and I/O load.\nHigher group_size -> More tiles merged in one process, less I/O load.\nLower group_size -> Less tiles merged in one process, more I/O load. ", "fa_icon": "fas fa-layer-group" + }, + "publish_dir_enabled": { + "type": "boolean", + "default": true, + "description": "Publish pipeline outputs.", + "help_text": "Set to `false` to prevent *all* modules from publishing their results.", + "fa_icon": "fas fa-database" } }, "help_text": "You can savely use the defaults.", From e67107df6ae7f326268d844e5d0e8e912b14f189 Mon Sep 17 00:00:00 2001 From: Felix Kummer Date: Wed, 13 Nov 2024 11:56:28 +0100 Subject: [PATCH 32/38] Fixed log output for preprocessing --- conf/modules.config | 2 +- modules/local/force-preprocess/main.nf | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index d310232..9eece2d 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -42,7 +42,7 @@ process { [ path: { "${params.outdir}/preprocess/${task.tag}/logs" }, mode: params.publish_dir_mode, - pattern: '*.log', + pattern: '**.log', enabled: params.publish_dir_enabled ], [ diff --git a/modules/local/force-preprocess/main.nf b/modules/local/force-preprocess/main.nf index d101429..e694b6c 100644 --- a/modules/local/force-preprocess/main.nf +++ b/modules/local/force-preprocess/main.nf @@ -11,7 +11,7 @@ process FORCE_PREPROCESS { output: path "**/*BOA.tif", optional:true, emit: boa_tiles path "**/*QAI.tif", optional:true, emit: qai_tiles - path "*.log" , emit: log + path "**.log" , emit: log path "versions.yml" , emit: versions when: @@ -36,7 +36,7 @@ process FORCE_PREPROCESS { FILEPATH=$data BASE=\$(basename $data) - force-l2ps \$FILEPATH \$PARAM > level2_log\$BASE.log + force-l2ps \$FILEPATH \$PARAM > level2_log/\$BASE.log cat <<-END_VERSIONS > versions.yml "${task.process}": From 88ea70f3d84041cf7dfa3c973db78136385e538f Mon Sep 17 00:00:00 2001 From: Felix Kummer Date: Sun, 24 Nov 2024 15:47:09 +0100 Subject: [PATCH 33/38] Added pipeline-level nf-test tests --- nf-test.config | 3 + tests/default.nf.test | 26 + tests/default.nf.test.snap | 1274 +++++++++++++++++++ tests/tweaked_params.nf.test | 32 + tests/tweaked_params.nf.test.snap | 947 ++++++++++++++ tests_large/check_test_full_results.nf.test | 4 +- 6 files changed, 2284 insertions(+), 2 deletions(-) create mode 100644 tests/default.nf.test create mode 100644 tests/default.nf.test.snap create mode 100644 tests/tweaked_params.nf.test create mode 100644 tests/tweaked_params.nf.test.snap diff --git a/nf-test.config b/nf-test.config index a2ad2ce..843ed05 100644 --- a/nf-test.config +++ b/nf-test.config @@ -5,4 +5,7 @@ config { configFile "tests/nextflow.config" profile "docker,test" + plugins { + load "nft-utils@0.0.3" + } } diff --git a/tests/default.nf.test b/tests/default.nf.test new file mode 100644 index 0000000..31f3c3e --- /dev/null +++ b/tests/default.nf.test @@ -0,0 +1,26 @@ +nextflow_pipeline { + + name "Test pipeline with default test profile settings " + script "../main.nf" + + test("Params: test profile default") { + + when { + params { + outdir = "$outputDir" + } + } + + then { + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + assert workflow.success + assert snapshot( + workflow.trace.succeeded().size(), + stable_name, + ).match() + + } + + } + +} diff --git a/tests/default.nf.test.snap b/tests/default.nf.test.snap new file mode 100644 index 0000000..d652eae --- /dev/null +++ b/tests/default.nf.test.snap @@ -0,0 +1,1274 @@ +{ + "Params: test profile default": { + "content": [ + 280, + [ + "higher-level", + "higher-level/X0109_Y0102", + "higher-level/X0109_Y0102/param_files", + "higher-level/X0109_Y0102/param_files/trend_X0109_Y0102.prm", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_data/multiqc.log", + "multiqc/multiqc_data/multiqc_citations.txt", + "multiqc/multiqc_data/multiqc_data.json", + "multiqc/multiqc_data/multiqc_software_versions.txt", + "multiqc/multiqc_data/multiqc_sources.txt", + "multiqc/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", + "preparation", + "preparation/mask", + "preparation/mask/X0103_Y0101", + "preparation/mask/X0103_Y0101/aoi.tif", + "preparation/mask/X0103_Y0102", + "preparation/mask/X0103_Y0102/aoi.tif", + "preparation/mask/X0103_Y0103", + "preparation/mask/X0103_Y0103/aoi.tif", + "preparation/mask/X0103_Y0104", + "preparation/mask/X0103_Y0104/aoi.tif", + "preparation/mask/X0103_Y0105", + "preparation/mask/X0103_Y0105/aoi.tif", + "preparation/mask/X0104_Y0101", + "preparation/mask/X0104_Y0101/aoi.tif", + "preparation/mask/X0104_Y0102", + "preparation/mask/X0104_Y0102/aoi.tif", + "preparation/mask/X0104_Y0103", + "preparation/mask/X0104_Y0103/aoi.tif", + "preparation/mask/X0104_Y0104", + "preparation/mask/X0104_Y0104/aoi.tif", + "preparation/mask/X0104_Y0105", + "preparation/mask/X0104_Y0105/aoi.tif", + "preparation/mask/X0105_Y0101", + "preparation/mask/X0105_Y0101/aoi.tif", + "preparation/mask/X0105_Y0102", + "preparation/mask/X0105_Y0102/aoi.tif", + "preparation/mask/X0105_Y0103", + "preparation/mask/X0105_Y0103/aoi.tif", + "preparation/mask/X0105_Y0104", + "preparation/mask/X0105_Y0104/aoi.tif", + "preparation/mask/X0105_Y0105", + "preparation/mask/X0105_Y0105/aoi.tif", + "preparation/mask/X0106_Y0101", + "preparation/mask/X0106_Y0101/aoi.tif", + "preparation/mask/X0106_Y0102", + "preparation/mask/X0106_Y0102/aoi.tif", + "preparation/mask/X0106_Y0103", + "preparation/mask/X0106_Y0103/aoi.tif", + "preparation/mask/X0106_Y0104", + "preparation/mask/X0106_Y0104/aoi.tif", + "preparation/mask/X0106_Y0105", + "preparation/mask/X0106_Y0105/aoi.tif", + "preparation/mask/X0107_Y0101", + "preparation/mask/X0107_Y0101/aoi.tif", + "preparation/mask/X0107_Y0102", + "preparation/mask/X0107_Y0102/aoi.tif", + "preparation/mask/X0107_Y0103", + "preparation/mask/X0107_Y0103/aoi.tif", + "preparation/mask/X0107_Y0104", + "preparation/mask/X0107_Y0104/aoi.tif", + "preparation/mask/X0107_Y0105", + "preparation/mask/X0107_Y0105/aoi.tif", + "preparation/mask/X0108_Y0101", + "preparation/mask/X0108_Y0101/aoi.tif", + "preparation/mask/X0108_Y0102", + "preparation/mask/X0108_Y0102/aoi.tif", + "preparation/mask/X0108_Y0103", + "preparation/mask/X0108_Y0103/aoi.tif", + "preparation/mask/X0108_Y0104", + "preparation/mask/X0108_Y0104/aoi.tif", + "preparation/mask/X0108_Y0105", + "preparation/mask/X0108_Y0105/aoi.tif", + "preparation/mask/X0109_Y0101", + "preparation/mask/X0109_Y0101/aoi.tif", + "preparation/mask/X0109_Y0102", + "preparation/mask/X0109_Y0102/aoi.tif", + "preparation/mask/X0109_Y0103", + "preparation/mask/X0109_Y0103/aoi.tif", + "preparation/mask/X0109_Y0104", + "preparation/mask/X0109_Y0104/aoi.tif", + "preparation/mask/X0109_Y0105", + "preparation/mask/X0109_Y0105/aoi.tif", + "preparation/mask/X0110_Y0101", + "preparation/mask/X0110_Y0101/aoi.tif", + "preparation/mask/X0110_Y0102", + "preparation/mask/X0110_Y0102/aoi.tif", + "preparation/mask/X0110_Y0103", + "preparation/mask/X0110_Y0103/aoi.tif", + "preparation/mask/X0110_Y0104", + "preparation/mask/X0110_Y0104/aoi.tif", + "preparation/mask/X0110_Y0105", + "preparation/mask/X0110_Y0105/aoi.tif", + "preparation/mask/X0111_Y0101", + "preparation/mask/X0111_Y0101/aoi.tif", + "preparation/mask/X0111_Y0102", + "preparation/mask/X0111_Y0102/aoi.tif", + "preparation/mask/X0111_Y0103", + "preparation/mask/X0111_Y0103/aoi.tif", + "preparation/mask/X0111_Y0104", + "preparation/mask/X0111_Y0104/aoi.tif", + "preparation/mask/X0111_Y0105", + "preparation/mask/X0111_Y0105/aoi.tif", + "preparation/tile_allow.txt", + "preprocess", + "preprocess/LT04_L1TP_181036_19880130_20200917_02_T1", + "preprocess/LT04_L1TP_181036_19880130_20200917_02_T1/logs", + "preprocess/LT04_L1TP_181036_19880130_20200917_02_T1/logs/level2_log", + "preprocess/LT04_L1TP_181036_19880130_20200917_02_T1/logs/level2_log/LT04_L1TP_181036_19880130_20200917_02_T1.log", + "preprocess/LT04_L1TP_181036_19880130_20200917_02_T1/param_files", + "preprocess/LT04_L1TP_181036_19880130_20200917_02_T1/param_files/LT04_L1TP_181036_19880130_20200917_02_T1.prm", + "preprocess/LT04_L1TP_181036_19881129_20200917_02_T1", + "preprocess/LT04_L1TP_181036_19881129_20200917_02_T1/logs", + "preprocess/LT04_L1TP_181036_19881129_20200917_02_T1/logs/level2_log", + "preprocess/LT04_L1TP_181036_19881129_20200917_02_T1/logs/level2_log/LT04_L1TP_181036_19881129_20200917_02_T1.log", + "preprocess/LT04_L1TP_181036_19881129_20200917_02_T1/param_files", + "preprocess/LT04_L1TP_181036_19881129_20200917_02_T1/param_files/LT04_L1TP_181036_19881129_20200917_02_T1.prm", + "preprocess/LT04_L1TP_181036_19881231_20200916_02_T1", + "preprocess/LT04_L1TP_181036_19881231_20200916_02_T1/logs", + "preprocess/LT04_L1TP_181036_19881231_20200916_02_T1/logs/level2_log", + "preprocess/LT04_L1TP_181036_19881231_20200916_02_T1/logs/level2_log/LT04_L1TP_181036_19881231_20200916_02_T1.log", + "preprocess/LT04_L1TP_181036_19881231_20200916_02_T1/param_files", + "preprocess/LT04_L1TP_181036_19881231_20200916_02_T1/param_files/LT04_L1TP_181036_19881231_20200916_02_T1.prm", + "preprocess/LT04_L1TP_181036_19891202_20200916_02_T1", + "preprocess/LT04_L1TP_181036_19891202_20200916_02_T1/logs", + "preprocess/LT04_L1TP_181036_19891202_20200916_02_T1/logs/level2_log", + "preprocess/LT04_L1TP_181036_19891202_20200916_02_T1/logs/level2_log/LT04_L1TP_181036_19891202_20200916_02_T1.log", + "preprocess/LT04_L1TP_181036_19891202_20200916_02_T1/param_files", + "preprocess/LT04_L1TP_181036_19891202_20200916_02_T1/param_files/LT04_L1TP_181036_19891202_20200916_02_T1.prm", + "preprocess/LT04_L1TP_181036_19891218_20200916_02_T1", + "preprocess/LT04_L1TP_181036_19891218_20200916_02_T1/logs", + "preprocess/LT04_L1TP_181036_19891218_20200916_02_T1/logs/level2_log", + "preprocess/LT04_L1TP_181036_19891218_20200916_02_T1/logs/level2_log/LT04_L1TP_181036_19891218_20200916_02_T1.log", + "preprocess/LT04_L1TP_181036_19891218_20200916_02_T1/param_files", + "preprocess/LT04_L1TP_181036_19891218_20200916_02_T1/param_files/LT04_L1TP_181036_19891218_20200916_02_T1.prm", + "preprocess/LT05_L1TP_181036_19870119_20201014_02_T1", + "preprocess/LT05_L1TP_181036_19870119_20201014_02_T1/logs", + "preprocess/LT05_L1TP_181036_19870119_20201014_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19870119_20201014_02_T1/logs/level2_log/LT05_L1TP_181036_19870119_20201014_02_T1.log", + "preprocess/LT05_L1TP_181036_19870119_20201014_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19870119_20201014_02_T1/param_files/LT05_L1TP_181036_19870119_20201014_02_T1.prm", + "preprocess/LT05_L1TP_181036_19870204_20201014_02_T1", + "preprocess/LT05_L1TP_181036_19870204_20201014_02_T1/logs", + "preprocess/LT05_L1TP_181036_19870204_20201014_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19870204_20201014_02_T1/logs/level2_log/LT05_L1TP_181036_19870204_20201014_02_T1.log", + "preprocess/LT05_L1TP_181036_19870204_20201014_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19870204_20201014_02_T1/param_files/LT05_L1TP_181036_19870204_20201014_02_T1.prm", + "preprocess/LT05_L1TP_181036_19870324_20211112_02_T1", + "preprocess/LT05_L1TP_181036_19870324_20211112_02_T1/logs", + "preprocess/LT05_L1TP_181036_19870324_20211112_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19870324_20211112_02_T1/logs/level2_log/LT05_L1TP_181036_19870324_20211112_02_T1.log", + "preprocess/LT05_L1TP_181036_19870324_20211112_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19870324_20211112_02_T1/param_files/LT05_L1TP_181036_19870324_20211112_02_T1.prm", + "preprocess/LT05_L1TP_181036_19870409_20201014_02_T1", + "preprocess/LT05_L1TP_181036_19870409_20201014_02_T1/logs", + "preprocess/LT05_L1TP_181036_19870409_20201014_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19870409_20201014_02_T1/logs/level2_log/LT05_L1TP_181036_19870409_20201014_02_T1.log", + "preprocess/LT05_L1TP_181036_19870409_20201014_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19870409_20201014_02_T1/param_files/LT05_L1TP_181036_19870409_20201014_02_T1.prm", + "preprocess/LT05_L1TP_181036_19870425_20201014_02_T1", + "preprocess/LT05_L1TP_181036_19870425_20201014_02_T1/logs", + "preprocess/LT05_L1TP_181036_19870425_20201014_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19870425_20201014_02_T1/logs/level2_log/LT05_L1TP_181036_19870425_20201014_02_T1.log", + "preprocess/LT05_L1TP_181036_19870425_20201014_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19870425_20201014_02_T1/param_files/LT05_L1TP_181036_19870425_20201014_02_T1.prm", + "preprocess/LT05_L1TP_181036_19870511_20201014_02_T1", + "preprocess/LT05_L1TP_181036_19870511_20201014_02_T1/logs", + "preprocess/LT05_L1TP_181036_19870511_20201014_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19870511_20201014_02_T1/logs/level2_log/LT05_L1TP_181036_19870511_20201014_02_T1.log", + "preprocess/LT05_L1TP_181036_19870511_20201014_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19870511_20201014_02_T1/param_files/LT05_L1TP_181036_19870511_20201014_02_T1.prm", + "preprocess/LT05_L1TP_181036_19870527_20211113_02_T1", + "preprocess/LT05_L1TP_181036_19870527_20211113_02_T1/logs", + "preprocess/LT05_L1TP_181036_19870527_20211113_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19870527_20211113_02_T1/logs/level2_log/LT05_L1TP_181036_19870527_20211113_02_T1.log", + "preprocess/LT05_L1TP_181036_19870527_20211113_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19870527_20211113_02_T1/param_files/LT05_L1TP_181036_19870527_20211113_02_T1.prm", + "preprocess/LT05_L1TP_181036_19870612_20201014_02_T1", + "preprocess/LT05_L1TP_181036_19870612_20201014_02_T1/logs", + "preprocess/LT05_L1TP_181036_19870612_20201014_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19870612_20201014_02_T1/logs/level2_log/LT05_L1TP_181036_19870612_20201014_02_T1.log", + "preprocess/LT05_L1TP_181036_19870612_20201014_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19870612_20201014_02_T1/param_files/LT05_L1TP_181036_19870612_20201014_02_T1.prm", + "preprocess/LT05_L1TP_181036_19870628_20201014_02_T1", + "preprocess/LT05_L1TP_181036_19870628_20201014_02_T1/logs", + "preprocess/LT05_L1TP_181036_19870628_20201014_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19870628_20201014_02_T1/logs/level2_log/LT05_L1TP_181036_19870628_20201014_02_T1.log", + "preprocess/LT05_L1TP_181036_19870628_20201014_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19870628_20201014_02_T1/param_files/LT05_L1TP_181036_19870628_20201014_02_T1.prm", + "preprocess/LT05_L1TP_181036_19870714_20201014_02_T1", + "preprocess/LT05_L1TP_181036_19870714_20201014_02_T1/logs", + "preprocess/LT05_L1TP_181036_19870714_20201014_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19870714_20201014_02_T1/logs/level2_log/LT05_L1TP_181036_19870714_20201014_02_T1.log", + "preprocess/LT05_L1TP_181036_19870714_20201014_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19870714_20201014_02_T1/param_files/LT05_L1TP_181036_19870714_20201014_02_T1.prm", + "preprocess/LT05_L1TP_181036_19870730_20201014_02_T1", + "preprocess/LT05_L1TP_181036_19870730_20201014_02_T1/logs", + "preprocess/LT05_L1TP_181036_19870730_20201014_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19870730_20201014_02_T1/logs/level2_log/LT05_L1TP_181036_19870730_20201014_02_T1.log", + "preprocess/LT05_L1TP_181036_19870730_20201014_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19870730_20201014_02_T1/param_files/LT05_L1TP_181036_19870730_20201014_02_T1.prm", + "preprocess/LT05_L1TP_181036_19870815_20201014_02_T1", + "preprocess/LT05_L1TP_181036_19870815_20201014_02_T1/logs", + "preprocess/LT05_L1TP_181036_19870815_20201014_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19870815_20201014_02_T1/logs/level2_log/LT05_L1TP_181036_19870815_20201014_02_T1.log", + "preprocess/LT05_L1TP_181036_19870815_20201014_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19870815_20201014_02_T1/param_files/LT05_L1TP_181036_19870815_20201014_02_T1.prm", + "preprocess/LT05_L1TP_181036_19870831_20201014_02_T1", + "preprocess/LT05_L1TP_181036_19870831_20201014_02_T1/logs", + "preprocess/LT05_L1TP_181036_19870831_20201014_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19870831_20201014_02_T1/logs/level2_log/LT05_L1TP_181036_19870831_20201014_02_T1.log", + "preprocess/LT05_L1TP_181036_19870831_20201014_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19870831_20201014_02_T1/param_files/LT05_L1TP_181036_19870831_20201014_02_T1.prm", + "preprocess/LT05_L1TP_181036_19870916_20201014_02_T1", + "preprocess/LT05_L1TP_181036_19870916_20201014_02_T1/logs", + "preprocess/LT05_L1TP_181036_19870916_20201014_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19870916_20201014_02_T1/logs/level2_log/LT05_L1TP_181036_19870916_20201014_02_T1.log", + "preprocess/LT05_L1TP_181036_19870916_20201014_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19870916_20201014_02_T1/param_files/LT05_L1TP_181036_19870916_20201014_02_T1.prm", + "preprocess/LT05_L1TP_181036_19871002_20201014_02_T1", + "preprocess/LT05_L1TP_181036_19871002_20201014_02_T1/logs", + "preprocess/LT05_L1TP_181036_19871002_20201014_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19871002_20201014_02_T1/logs/level2_log/LT05_L1TP_181036_19871002_20201014_02_T1.log", + "preprocess/LT05_L1TP_181036_19871002_20201014_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19871002_20201014_02_T1/param_files/LT05_L1TP_181036_19871002_20201014_02_T1.prm", + "preprocess/LT05_L1TP_181036_19871205_20201014_02_T1", + "preprocess/LT05_L1TP_181036_19871205_20201014_02_T1/logs", + "preprocess/LT05_L1TP_181036_19871205_20201014_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19871205_20201014_02_T1/logs/level2_log/LT05_L1TP_181036_19871205_20201014_02_T1.log", + "preprocess/LT05_L1TP_181036_19871205_20201014_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19871205_20201014_02_T1/param_files/LT05_L1TP_181036_19871205_20201014_02_T1.prm", + "preprocess/LT05_L1TP_181036_19880106_20211116_02_T1", + "preprocess/LT05_L1TP_181036_19880106_20211116_02_T1/logs", + "preprocess/LT05_L1TP_181036_19880106_20211116_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19880106_20211116_02_T1/logs/level2_log/LT05_L1TP_181036_19880106_20211116_02_T1.log", + "preprocess/LT05_L1TP_181036_19880106_20211116_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19880106_20211116_02_T1/param_files/LT05_L1TP_181036_19880106_20211116_02_T1.prm", + "preprocess/LT05_L1TP_181036_19880122_20200917_02_T1", + "preprocess/LT05_L1TP_181036_19880122_20200917_02_T1/logs", + "preprocess/LT05_L1TP_181036_19880122_20200917_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19880122_20200917_02_T1/logs/level2_log/LT05_L1TP_181036_19880122_20200917_02_T1.log", + "preprocess/LT05_L1TP_181036_19880122_20200917_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19880122_20200917_02_T1/param_files/LT05_L1TP_181036_19880122_20200917_02_T1.prm", + "preprocess/LT05_L1TP_181036_19880223_20200917_02_T1", + "preprocess/LT05_L1TP_181036_19880223_20200917_02_T1/logs", + "preprocess/LT05_L1TP_181036_19880223_20200917_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19880223_20200917_02_T1/logs/level2_log/LT05_L1TP_181036_19880223_20200917_02_T1.log", + "preprocess/LT05_L1TP_181036_19880223_20200917_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19880223_20200917_02_T1/param_files/LT05_L1TP_181036_19880223_20200917_02_T1.prm", + "preprocess/LT05_L1TP_181036_19880310_20200917_02_T1", + "preprocess/LT05_L1TP_181036_19880310_20200917_02_T1/logs", + "preprocess/LT05_L1TP_181036_19880310_20200917_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19880310_20200917_02_T1/logs/level2_log/LT05_L1TP_181036_19880310_20200917_02_T1.log", + "preprocess/LT05_L1TP_181036_19880310_20200917_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19880310_20200917_02_T1/param_files/LT05_L1TP_181036_19880310_20200917_02_T1.prm", + "preprocess/LT05_L1TP_181036_19880326_20200917_02_T1", + "preprocess/LT05_L1TP_181036_19880326_20200917_02_T1/logs", + "preprocess/LT05_L1TP_181036_19880326_20200917_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19880326_20200917_02_T1/logs/level2_log/LT05_L1TP_181036_19880326_20200917_02_T1.log", + "preprocess/LT05_L1TP_181036_19880326_20200917_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19880326_20200917_02_T1/param_files/LT05_L1TP_181036_19880326_20200917_02_T1.prm", + "preprocess/LT05_L1TP_181036_19880411_20200917_02_T1", + "preprocess/LT05_L1TP_181036_19880411_20200917_02_T1/logs", + "preprocess/LT05_L1TP_181036_19880411_20200917_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19880411_20200917_02_T1/logs/level2_log/LT05_L1TP_181036_19880411_20200917_02_T1.log", + "preprocess/LT05_L1TP_181036_19880411_20200917_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19880411_20200917_02_T1/param_files/LT05_L1TP_181036_19880411_20200917_02_T1.prm", + "preprocess/LT05_L1TP_181036_19880529_20200917_02_T1", + "preprocess/LT05_L1TP_181036_19880529_20200917_02_T1/logs", + "preprocess/LT05_L1TP_181036_19880529_20200917_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19880529_20200917_02_T1/logs/level2_log/LT05_L1TP_181036_19880529_20200917_02_T1.log", + "preprocess/LT05_L1TP_181036_19880529_20200917_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19880529_20200917_02_T1/param_files/LT05_L1TP_181036_19880529_20200917_02_T1.prm", + "preprocess/LT05_L1TP_181036_19880614_20211118_02_T1", + "preprocess/LT05_L1TP_181036_19880614_20211118_02_T1/logs", + "preprocess/LT05_L1TP_181036_19880614_20211118_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19880614_20211118_02_T1/logs/level2_log/LT05_L1TP_181036_19880614_20211118_02_T1.log", + "preprocess/LT05_L1TP_181036_19880614_20211118_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19880614_20211118_02_T1/param_files/LT05_L1TP_181036_19880614_20211118_02_T1.prm", + "preprocess/LT05_L1TP_181036_19880630_20200917_02_T1", + "preprocess/LT05_L1TP_181036_19880630_20200917_02_T1/logs", + "preprocess/LT05_L1TP_181036_19880630_20200917_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19880630_20200917_02_T1/logs/level2_log/LT05_L1TP_181036_19880630_20200917_02_T1.log", + "preprocess/LT05_L1TP_181036_19880630_20200917_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19880630_20200917_02_T1/param_files/LT05_L1TP_181036_19880630_20200917_02_T1.prm", + "preprocess/LT05_L1TP_181036_19880716_20200917_02_T1", + "preprocess/LT05_L1TP_181036_19880716_20200917_02_T1/logs", + "preprocess/LT05_L1TP_181036_19880716_20200917_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19880716_20200917_02_T1/logs/level2_log/LT05_L1TP_181036_19880716_20200917_02_T1.log", + "preprocess/LT05_L1TP_181036_19880716_20200917_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19880716_20200917_02_T1/param_files/LT05_L1TP_181036_19880716_20200917_02_T1.prm", + "preprocess/LT05_L1TP_181036_19880801_20200917_02_T1", + "preprocess/LT05_L1TP_181036_19880801_20200917_02_T1/logs", + "preprocess/LT05_L1TP_181036_19880801_20200917_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19880801_20200917_02_T1/logs/level2_log/LT05_L1TP_181036_19880801_20200917_02_T1.log", + "preprocess/LT05_L1TP_181036_19880801_20200917_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19880801_20200917_02_T1/param_files/LT05_L1TP_181036_19880801_20200917_02_T1.prm", + "preprocess/LT05_L1TP_181036_19880902_20211118_02_T1", + "preprocess/LT05_L1TP_181036_19880902_20211118_02_T1/logs", + "preprocess/LT05_L1TP_181036_19880902_20211118_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19880902_20211118_02_T1/logs/level2_log/LT05_L1TP_181036_19880902_20211118_02_T1.log", + "preprocess/LT05_L1TP_181036_19880902_20211118_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19880902_20211118_02_T1/param_files/LT05_L1TP_181036_19880902_20211118_02_T1.prm", + "preprocess/LT05_L1TP_181036_19880918_20200917_02_T1", + "preprocess/LT05_L1TP_181036_19880918_20200917_02_T1/logs", + "preprocess/LT05_L1TP_181036_19880918_20200917_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19880918_20200917_02_T1/logs/level2_log/LT05_L1TP_181036_19880918_20200917_02_T1.log", + "preprocess/LT05_L1TP_181036_19880918_20200917_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19880918_20200917_02_T1/param_files/LT05_L1TP_181036_19880918_20200917_02_T1.prm", + "preprocess/LT05_L1TP_181036_19881004_20200917_02_T1", + "preprocess/LT05_L1TP_181036_19881004_20200917_02_T1/logs", + "preprocess/LT05_L1TP_181036_19881004_20200917_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19881004_20200917_02_T1/logs/level2_log/LT05_L1TP_181036_19881004_20200917_02_T1.log", + "preprocess/LT05_L1TP_181036_19881004_20200917_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19881004_20200917_02_T1/param_files/LT05_L1TP_181036_19881004_20200917_02_T1.prm", + "preprocess/LT05_L1TP_181036_19881020_20200917_02_T1", + "preprocess/LT05_L1TP_181036_19881020_20200917_02_T1/logs", + "preprocess/LT05_L1TP_181036_19881020_20200917_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19881020_20200917_02_T1/logs/level2_log/LT05_L1TP_181036_19881020_20200917_02_T1.log", + "preprocess/LT05_L1TP_181036_19881020_20200917_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19881020_20200917_02_T1/param_files/LT05_L1TP_181036_19881020_20200917_02_T1.prm", + "preprocess/LT05_L1TP_181036_19881121_20211118_02_T1", + "preprocess/LT05_L1TP_181036_19881121_20211118_02_T1/logs", + "preprocess/LT05_L1TP_181036_19881121_20211118_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19881121_20211118_02_T1/logs/level2_log/LT05_L1TP_181036_19881121_20211118_02_T1.log", + "preprocess/LT05_L1TP_181036_19881121_20211118_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19881121_20211118_02_T1/param_files/LT05_L1TP_181036_19881121_20211118_02_T1.prm", + "preprocess/LT05_L1TP_181036_19881223_20211119_02_T1", + "preprocess/LT05_L1TP_181036_19881223_20211119_02_T1/logs", + "preprocess/LT05_L1TP_181036_19881223_20211119_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19881223_20211119_02_T1/logs/level2_log/LT05_L1TP_181036_19881223_20211119_02_T1.log", + "preprocess/LT05_L1TP_181036_19881223_20211119_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19881223_20211119_02_T1/param_files/LT05_L1TP_181036_19881223_20211119_02_T1.prm", + "preprocess/LT05_L1TP_181036_19890108_20200916_02_T1", + "preprocess/LT05_L1TP_181036_19890108_20200916_02_T1/logs", + "preprocess/LT05_L1TP_181036_19890108_20200916_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19890108_20200916_02_T1/logs/level2_log/LT05_L1TP_181036_19890108_20200916_02_T1.log", + "preprocess/LT05_L1TP_181036_19890108_20200916_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19890108_20200916_02_T1/param_files/LT05_L1TP_181036_19890108_20200916_02_T1.prm", + "preprocess/LT05_L1TP_181036_19890209_20211120_02_T1", + "preprocess/LT05_L1TP_181036_19890209_20211120_02_T1/logs", + "preprocess/LT05_L1TP_181036_19890209_20211120_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19890209_20211120_02_T1/logs/level2_log/LT05_L1TP_181036_19890209_20211120_02_T1.log", + "preprocess/LT05_L1TP_181036_19890209_20211120_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19890209_20211120_02_T1/param_files/LT05_L1TP_181036_19890209_20211120_02_T1.prm", + "preprocess/LT05_L1TP_181036_19890414_20200916_02_T1", + "preprocess/LT05_L1TP_181036_19890414_20200916_02_T1/logs", + "preprocess/LT05_L1TP_181036_19890414_20200916_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19890414_20200916_02_T1/logs/level2_log/LT05_L1TP_181036_19890414_20200916_02_T1.log", + "preprocess/LT05_L1TP_181036_19890414_20200916_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19890414_20200916_02_T1/param_files/LT05_L1TP_181036_19890414_20200916_02_T1.prm", + "preprocess/LT05_L1TP_181036_19890430_20200916_02_T1", + "preprocess/LT05_L1TP_181036_19890430_20200916_02_T1/logs", + "preprocess/LT05_L1TP_181036_19890430_20200916_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19890430_20200916_02_T1/logs/level2_log/LT05_L1TP_181036_19890430_20200916_02_T1.log", + "preprocess/LT05_L1TP_181036_19890430_20200916_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19890430_20200916_02_T1/param_files/LT05_L1TP_181036_19890430_20200916_02_T1.prm", + "preprocess/LT05_L1TP_181036_19890516_20200916_02_T1", + "preprocess/LT05_L1TP_181036_19890516_20200916_02_T1/logs", + "preprocess/LT05_L1TP_181036_19890516_20200916_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19890516_20200916_02_T1/logs/level2_log/LT05_L1TP_181036_19890516_20200916_02_T1.log", + "preprocess/LT05_L1TP_181036_19890516_20200916_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19890516_20200916_02_T1/param_files/LT05_L1TP_181036_19890516_20200916_02_T1.prm", + "preprocess/LT05_L1TP_181036_19890601_20200916_02_T1", + "preprocess/LT05_L1TP_181036_19890601_20200916_02_T1/logs", + "preprocess/LT05_L1TP_181036_19890601_20200916_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19890601_20200916_02_T1/logs/level2_log/LT05_L1TP_181036_19890601_20200916_02_T1.log", + "preprocess/LT05_L1TP_181036_19890601_20200916_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19890601_20200916_02_T1/param_files/LT05_L1TP_181036_19890601_20200916_02_T1.prm", + "preprocess/LT05_L1TP_181036_19890617_20200916_02_T1", + "preprocess/LT05_L1TP_181036_19890617_20200916_02_T1/logs", + "preprocess/LT05_L1TP_181036_19890617_20200916_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19890617_20200916_02_T1/logs/level2_log/LT05_L1TP_181036_19890617_20200916_02_T1.log", + "preprocess/LT05_L1TP_181036_19890617_20200916_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19890617_20200916_02_T1/param_files/LT05_L1TP_181036_19890617_20200916_02_T1.prm", + "preprocess/LT05_L1TP_181036_19890703_20200916_02_T1", + "preprocess/LT05_L1TP_181036_19890703_20200916_02_T1/logs", + "preprocess/LT05_L1TP_181036_19890703_20200916_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19890703_20200916_02_T1/logs/level2_log/LT05_L1TP_181036_19890703_20200916_02_T1.log", + "preprocess/LT05_L1TP_181036_19890703_20200916_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19890703_20200916_02_T1/param_files/LT05_L1TP_181036_19890703_20200916_02_T1.prm", + "preprocess/LT05_L1TP_181036_19890719_20200916_02_T1", + "preprocess/LT05_L1TP_181036_19890719_20200916_02_T1/logs", + "preprocess/LT05_L1TP_181036_19890719_20200916_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19890719_20200916_02_T1/logs/level2_log/LT05_L1TP_181036_19890719_20200916_02_T1.log", + "preprocess/LT05_L1TP_181036_19890719_20200916_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19890719_20200916_02_T1/param_files/LT05_L1TP_181036_19890719_20200916_02_T1.prm", + "preprocess/LT05_L1TP_181036_19890804_20200916_02_T1", + "preprocess/LT05_L1TP_181036_19890804_20200916_02_T1/logs", + "preprocess/LT05_L1TP_181036_19890804_20200916_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19890804_20200916_02_T1/logs/level2_log/LT05_L1TP_181036_19890804_20200916_02_T1.log", + "preprocess/LT05_L1TP_181036_19890804_20200916_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19890804_20200916_02_T1/param_files/LT05_L1TP_181036_19890804_20200916_02_T1.prm", + "preprocess/LT05_L1TP_181036_19890820_20200916_02_T1", + "preprocess/LT05_L1TP_181036_19890820_20200916_02_T1/logs", + "preprocess/LT05_L1TP_181036_19890820_20200916_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19890820_20200916_02_T1/logs/level2_log/LT05_L1TP_181036_19890820_20200916_02_T1.log", + "preprocess/LT05_L1TP_181036_19890820_20200916_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19890820_20200916_02_T1/param_files/LT05_L1TP_181036_19890820_20200916_02_T1.prm", + "preprocess/LT05_L1TP_181036_19890905_20200916_02_T1", + "preprocess/LT05_L1TP_181036_19890905_20200916_02_T1/logs", + "preprocess/LT05_L1TP_181036_19890905_20200916_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19890905_20200916_02_T1/logs/level2_log/LT05_L1TP_181036_19890905_20200916_02_T1.log", + "preprocess/LT05_L1TP_181036_19890905_20200916_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19890905_20200916_02_T1/param_files/LT05_L1TP_181036_19890905_20200916_02_T1.prm", + "preprocess/LT05_L1TP_181036_19890921_20200916_02_T1", + "preprocess/LT05_L1TP_181036_19890921_20200916_02_T1/logs", + "preprocess/LT05_L1TP_181036_19890921_20200916_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19890921_20200916_02_T1/logs/level2_log/LT05_L1TP_181036_19890921_20200916_02_T1.log", + "preprocess/LT05_L1TP_181036_19890921_20200916_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19890921_20200916_02_T1/param_files/LT05_L1TP_181036_19890921_20200916_02_T1.prm", + "preprocess/LT05_L1TP_181036_19891007_20200916_02_T1", + "preprocess/LT05_L1TP_181036_19891007_20200916_02_T1/logs", + "preprocess/LT05_L1TP_181036_19891007_20200916_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19891007_20200916_02_T1/logs/level2_log/LT05_L1TP_181036_19891007_20200916_02_T1.log", + "preprocess/LT05_L1TP_181036_19891007_20200916_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19891007_20200916_02_T1/param_files/LT05_L1TP_181036_19891007_20200916_02_T1.prm", + "preprocess/LT05_L1TP_181036_19891023_20200916_02_T1", + "preprocess/LT05_L1TP_181036_19891023_20200916_02_T1/logs", + "preprocess/LT05_L1TP_181036_19891023_20200916_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19891023_20200916_02_T1/logs/level2_log/LT05_L1TP_181036_19891023_20200916_02_T1.log", + "preprocess/LT05_L1TP_181036_19891023_20200916_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19891023_20200916_02_T1/param_files/LT05_L1TP_181036_19891023_20200916_02_T1.prm", + "preprocess/LT05_L1TP_181036_19891108_20200916_02_T1", + "preprocess/LT05_L1TP_181036_19891108_20200916_02_T1/logs", + "preprocess/LT05_L1TP_181036_19891108_20200916_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19891108_20200916_02_T1/logs/level2_log/LT05_L1TP_181036_19891108_20200916_02_T1.log", + "preprocess/LT05_L1TP_181036_19891108_20200916_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19891108_20200916_02_T1/param_files/LT05_L1TP_181036_19891108_20200916_02_T1.prm", + "preprocess/LT05_L1TP_181036_19891124_20211121_02_T1", + "preprocess/LT05_L1TP_181036_19891124_20211121_02_T1/logs", + "preprocess/LT05_L1TP_181036_19891124_20211121_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19891124_20211121_02_T1/logs/level2_log/LT05_L1TP_181036_19891124_20211121_02_T1.log", + "preprocess/LT05_L1TP_181036_19891124_20211121_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19891124_20211121_02_T1/param_files/LT05_L1TP_181036_19891124_20211121_02_T1.prm", + "preprocess/LT05_L1TP_181036_19891210_20211121_02_T1", + "preprocess/LT05_L1TP_181036_19891210_20211121_02_T1/logs", + "preprocess/LT05_L1TP_181036_19891210_20211121_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19891210_20211121_02_T1/logs/level2_log/LT05_L1TP_181036_19891210_20211121_02_T1.log", + "preprocess/LT05_L1TP_181036_19891210_20211121_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19891210_20211121_02_T1/param_files/LT05_L1TP_181036_19891210_20211121_02_T1.prm", + "trend", + "trend/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_TSI", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_TSI/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_TSI/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_BLU_TSI.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_TSI/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_BLU_TSI.tif.aux.xml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_TSI/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_TSI/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_TSI.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_TSI/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VBL-CAO", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VBL-CAO/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VBL-CAO/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_BLU_VBL-CAO.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VBL-CAO/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VBL-CAO/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VBL-CAO.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VBL-CAO/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VBL-POL", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VBL-POL/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VBL-POL/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_BLU_VBL-POL.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VBL-POL/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VBL-POL/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VBL-POL.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VBL-POL/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VBL-TRO", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VBL-TRO/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VBL-TRO/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_BLU_VBL-TRO.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VBL-TRO/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VBL-TRO/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VBL-TRO.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VBL-TRO/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VPS-CAO", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VPS-CAO/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VPS-CAO/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_BLU_VPS-CAO.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VPS-CAO/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VPS-CAO/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VPS-CAO.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VPS-CAO/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VPS-POL", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VPS-POL/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VPS-POL/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_BLU_VPS-POL.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VPS-POL/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VPS-POL/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VPS-POL.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VPS-POL/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VPS-TRO", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VPS-TRO/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VPS-TRO/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_BLU_VPS-TRO.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VPS-TRO/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VPS-TRO/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VPS-TRO.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VPS-TRO/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VSA-CAO", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VSA-CAO/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VSA-CAO/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_BLU_VSA-CAO.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VSA-CAO/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VSA-CAO/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VSA-CAO.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VSA-CAO/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VSA-POL", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VSA-POL/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VSA-POL/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_BLU_VSA-POL.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VSA-POL/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VSA-POL/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VSA-POL.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VSA-POL/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VSA-TRO", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VSA-TRO/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VSA-TRO/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_BLU_VSA-TRO.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VSA-TRO/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VSA-TRO/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VSA-TRO.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_BLU_VSA-TRO/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_TSI", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_TSI/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_TSI/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_GRN_TSI.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_TSI/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_GRN_TSI.tif.aux.xml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_TSI/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_TSI/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_TSI.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_TSI/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VBL-CAO", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VBL-CAO/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VBL-CAO/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_GRN_VBL-CAO.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VBL-CAO/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VBL-CAO/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VBL-CAO.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VBL-CAO/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VBL-POL", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VBL-POL/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VBL-POL/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_GRN_VBL-POL.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VBL-POL/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VBL-POL/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VBL-POL.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VBL-POL/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VBL-TRO", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VBL-TRO/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VBL-TRO/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_GRN_VBL-TRO.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VBL-TRO/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VBL-TRO/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VBL-TRO.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VBL-TRO/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VPS-CAO", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VPS-CAO/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VPS-CAO/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_GRN_VPS-CAO.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VPS-CAO/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VPS-CAO/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VPS-CAO.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VPS-CAO/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VPS-POL", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VPS-POL/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VPS-POL/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_GRN_VPS-POL.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VPS-POL/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VPS-POL/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VPS-POL.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VPS-POL/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VPS-TRO", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VPS-TRO/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VPS-TRO/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_GRN_VPS-TRO.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VPS-TRO/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VPS-TRO/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VPS-TRO.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VPS-TRO/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VSA-CAO", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VSA-CAO/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VSA-CAO/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_GRN_VSA-CAO.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VSA-CAO/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VSA-CAO/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VSA-CAO.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VSA-CAO/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VSA-POL", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VSA-POL/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VSA-POL/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_GRN_VSA-POL.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VSA-POL/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VSA-POL/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VSA-POL.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VSA-POL/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VSA-TRO", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VSA-TRO/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VSA-TRO/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_GRN_VSA-TRO.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VSA-TRO/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VSA-TRO/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VSA-TRO.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_GRN_VSA-TRO/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_TSI", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_TSI/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_TSI/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_NDV_TSI.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_TSI/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_NDV_TSI.tif.aux.xml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_TSI/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_TSI/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_TSI.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_TSI/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VBL-CAO", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VBL-CAO/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VBL-CAO/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_NDV_VBL-CAO.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VBL-CAO/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VBL-CAO/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VBL-CAO.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VBL-CAO/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VBL-POL", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VBL-POL/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VBL-POL/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_NDV_VBL-POL.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VBL-POL/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VBL-POL/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VBL-POL.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VBL-POL/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VBL-TRO", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VBL-TRO/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VBL-TRO/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_NDV_VBL-TRO.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VBL-TRO/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VBL-TRO/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VBL-TRO.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VBL-TRO/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VPS-CAO", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VPS-CAO/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VPS-CAO/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_NDV_VPS-CAO.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VPS-CAO/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VPS-CAO/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VPS-CAO.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VPS-CAO/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VPS-POL", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VPS-POL/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VPS-POL/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_NDV_VPS-POL.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VPS-POL/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VPS-POL/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VPS-POL.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VPS-POL/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VPS-TRO", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VPS-TRO/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VPS-TRO/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_NDV_VPS-TRO.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VPS-TRO/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VPS-TRO/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VPS-TRO.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VPS-TRO/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VSA-CAO", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VSA-CAO/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VSA-CAO/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_NDV_VSA-CAO.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VSA-CAO/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VSA-CAO/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VSA-CAO.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VSA-CAO/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VSA-POL", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VSA-POL/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VSA-POL/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_NDV_VSA-POL.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VSA-POL/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VSA-POL/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VSA-POL.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VSA-POL/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VSA-TRO", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VSA-TRO/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VSA-TRO/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_NDV_VSA-TRO.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VSA-TRO/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VSA-TRO/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VSA-TRO.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NDV_VSA-TRO/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_TSI", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_TSI/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_TSI/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_NIR_TSI.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_TSI/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_NIR_TSI.tif.aux.xml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_TSI/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_TSI/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_TSI.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_TSI/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VBL-CAO", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VBL-CAO/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VBL-CAO/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_NIR_VBL-CAO.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VBL-CAO/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VBL-CAO/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VBL-CAO.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VBL-CAO/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VBL-POL", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VBL-POL/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VBL-POL/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_NIR_VBL-POL.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VBL-POL/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VBL-POL/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VBL-POL.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VBL-POL/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VBL-TRO", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VBL-TRO/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VBL-TRO/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_NIR_VBL-TRO.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VBL-TRO/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VBL-TRO/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VBL-TRO.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VBL-TRO/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VPS-CAO", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VPS-CAO/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VPS-CAO/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_NIR_VPS-CAO.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VPS-CAO/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VPS-CAO/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VPS-CAO.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VPS-CAO/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VPS-POL", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VPS-POL/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VPS-POL/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_NIR_VPS-POL.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VPS-POL/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VPS-POL/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VPS-POL.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VPS-POL/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VPS-TRO", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VPS-TRO/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VPS-TRO/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_NIR_VPS-TRO.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VPS-TRO/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VPS-TRO/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VPS-TRO.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VPS-TRO/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VSA-CAO", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VSA-CAO/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VSA-CAO/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_NIR_VSA-CAO.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VSA-CAO/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VSA-CAO/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VSA-CAO.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VSA-CAO/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VSA-POL", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VSA-POL/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VSA-POL/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_NIR_VSA-POL.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VSA-POL/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VSA-POL/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VSA-POL.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VSA-POL/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VSA-TRO", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VSA-TRO/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VSA-TRO/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_NIR_VSA-TRO.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VSA-TRO/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VSA-TRO/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VSA-TRO.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_NIR_VSA-TRO/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_TSI", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_TSI/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_TSI/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_RED_TSI.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_TSI/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_RED_TSI.tif.aux.xml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_TSI/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_TSI/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_TSI.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_TSI/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VBL-CAO", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VBL-CAO/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VBL-CAO/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_RED_VBL-CAO.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VBL-CAO/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VBL-CAO/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VBL-CAO.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VBL-CAO/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VBL-POL", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VBL-POL/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VBL-POL/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_RED_VBL-POL.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VBL-POL/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VBL-POL/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VBL-POL.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VBL-POL/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VBL-TRO", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VBL-TRO/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VBL-TRO/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_RED_VBL-TRO.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VBL-TRO/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VBL-TRO/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VBL-TRO.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VBL-TRO/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VPS-CAO", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VPS-CAO/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VPS-CAO/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_RED_VPS-CAO.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VPS-CAO/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VPS-CAO/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VPS-CAO.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VPS-CAO/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VPS-POL", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VPS-POL/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VPS-POL/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_RED_VPS-POL.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VPS-POL/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VPS-POL/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VPS-POL.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VPS-POL/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VPS-TRO", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VPS-TRO/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VPS-TRO/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_RED_VPS-TRO.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VPS-TRO/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VPS-TRO/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VPS-TRO.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VPS-TRO/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VSA-CAO", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VSA-CAO/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VSA-CAO/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_RED_VSA-CAO.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VSA-CAO/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VSA-CAO/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VSA-CAO.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VSA-CAO/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VSA-POL", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VSA-POL/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VSA-POL/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_RED_VSA-POL.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VSA-POL/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VSA-POL/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VSA-POL.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VSA-POL/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VSA-TRO", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VSA-TRO/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VSA-TRO/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_RED_VSA-TRO.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VSA-TRO/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VSA-TRO/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VSA-TRO.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_RED_VSA-TRO/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_TSI", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_TSI/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_TSI/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_SMA_TSI.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_TSI/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_SMA_TSI.tif.aux.xml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_TSI/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_TSI/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_TSI.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_TSI/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VBL-CAO", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VBL-CAO/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VBL-CAO/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_SMA_VBL-CAO.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VBL-CAO/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VBL-CAO/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VBL-CAO.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VBL-CAO/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VBL-POL", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VBL-POL/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VBL-POL/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_SMA_VBL-POL.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VBL-POL/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VBL-POL/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VBL-POL.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VBL-POL/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VBL-TRO", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VBL-TRO/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VBL-TRO/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_SMA_VBL-TRO.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VBL-TRO/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VBL-TRO/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VBL-TRO.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VBL-TRO/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VPS-CAO", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VPS-CAO/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VPS-CAO/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_SMA_VPS-CAO.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VPS-CAO/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VPS-CAO/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VPS-CAO.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VPS-CAO/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VPS-POL", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VPS-POL/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VPS-POL/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_SMA_VPS-POL.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VPS-POL/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VPS-POL/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VPS-POL.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VPS-POL/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VPS-TRO", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VPS-TRO/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VPS-TRO/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_SMA_VPS-TRO.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VPS-TRO/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VPS-TRO/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VPS-TRO.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VPS-TRO/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VSA-CAO", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VSA-CAO/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VSA-CAO/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_SMA_VSA-CAO.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VSA-CAO/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VSA-CAO/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VSA-CAO.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VSA-CAO/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VSA-POL", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VSA-POL/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VSA-POL/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_SMA_VSA-POL.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VSA-POL/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VSA-POL/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VSA-POL.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VSA-POL/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VSA-TRO", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VSA-TRO/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VSA-TRO/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_SMA_VSA-TRO.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VSA-TRO/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VSA-TRO/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VSA-TRO.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SMA_VSA-TRO/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_TSI", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_TSI/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_TSI/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_SW1_TSI.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_TSI/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_SW1_TSI.tif.aux.xml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_TSI/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_TSI/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_TSI.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_TSI/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VBL-CAO", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VBL-CAO/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VBL-CAO/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_SW1_VBL-CAO.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VBL-CAO/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VBL-CAO/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VBL-CAO.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VBL-CAO/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VBL-POL", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VBL-POL/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VBL-POL/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_SW1_VBL-POL.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VBL-POL/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VBL-POL/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VBL-POL.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VBL-POL/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VBL-TRO", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VBL-TRO/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VBL-TRO/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_SW1_VBL-TRO.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VBL-TRO/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VBL-TRO/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VBL-TRO.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VBL-TRO/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VPS-CAO", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VPS-CAO/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VPS-CAO/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_SW1_VPS-CAO.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VPS-CAO/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VPS-CAO/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VPS-CAO.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VPS-CAO/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VPS-POL", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VPS-POL/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VPS-POL/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_SW1_VPS-POL.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VPS-POL/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VPS-POL/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VPS-POL.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VPS-POL/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VPS-TRO", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VPS-TRO/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VPS-TRO/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_SW1_VPS-TRO.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VPS-TRO/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VPS-TRO/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VPS-TRO.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VPS-TRO/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VSA-CAO", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VSA-CAO/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VSA-CAO/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_SW1_VSA-CAO.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VSA-CAO/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VSA-CAO/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VSA-CAO.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VSA-CAO/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VSA-POL", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VSA-POL/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VSA-POL/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_SW1_VSA-POL.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VSA-POL/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VSA-POL/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VSA-POL.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VSA-POL/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VSA-TRO", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VSA-TRO/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VSA-TRO/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_SW1_VSA-TRO.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VSA-TRO/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VSA-TRO/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VSA-TRO.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW1_VSA-TRO/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_TSI", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_TSI/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_TSI/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_SW2_TSI.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_TSI/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_SW2_TSI.tif.aux.xml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_TSI/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_TSI/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_TSI.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_TSI/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VBL-CAO", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VBL-CAO/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VBL-CAO/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_SW2_VBL-CAO.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VBL-CAO/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VBL-CAO/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VBL-CAO.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VBL-CAO/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VBL-POL", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VBL-POL/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VBL-POL/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_SW2_VBL-POL.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VBL-POL/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VBL-POL/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VBL-POL.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VBL-POL/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VBL-TRO", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VBL-TRO/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VBL-TRO/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_SW2_VBL-TRO.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VBL-TRO/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VBL-TRO/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VBL-TRO.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VBL-TRO/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VPS-CAO", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VPS-CAO/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VPS-CAO/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_SW2_VPS-CAO.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VPS-CAO/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VPS-CAO/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VPS-CAO.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VPS-CAO/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VPS-POL", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VPS-POL/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VPS-POL/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_SW2_VPS-POL.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VPS-POL/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VPS-POL/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VPS-POL.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VPS-POL/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VPS-TRO", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VPS-TRO/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VPS-TRO/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_SW2_VPS-TRO.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VPS-TRO/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VPS-TRO/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VPS-TRO.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VPS-TRO/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VSA-CAO", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VSA-CAO/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VSA-CAO/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_SW2_VSA-CAO.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VSA-CAO/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VSA-CAO/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VSA-CAO.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VSA-CAO/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VSA-POL", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VSA-POL/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VSA-POL/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_SW2_VSA-POL.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VSA-POL/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VSA-POL/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VSA-POL.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VSA-POL/versions.yml", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VSA-TRO", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VSA-TRO/X0109_Y0102", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VSA-TRO/X0109_Y0102/1987-1989_001-365_HL_TSA_LNDLG_SW2_VSA-TRO.tif", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VSA-TRO/mosaic", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VSA-TRO/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VSA-TRO.vrt", + "trend/mosaic/1987-1989_001-365_HL_TSA_LNDLG_SW2_VSA-TRO/versions.yml", + "trend/pyramid", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_BLU_TSI", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_BLU_TSI/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_BLU_TSI/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_BLU_TSI/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_BLU_TSI.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_BLU_VBL-CAO", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_BLU_VBL-CAO/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_BLU_VBL-CAO/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_BLU_VBL-CAO/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_BLU_VBL-CAO.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_BLU_VBL-POL", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_BLU_VBL-POL/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_BLU_VBL-POL/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_BLU_VBL-POL/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_BLU_VBL-POL.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_BLU_VBL-TRO", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_BLU_VBL-TRO/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_BLU_VBL-TRO/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_BLU_VBL-TRO/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_BLU_VBL-TRO.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_BLU_VPS-CAO", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_BLU_VPS-CAO/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_BLU_VPS-CAO/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_BLU_VPS-CAO/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_BLU_VPS-CAO.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_BLU_VPS-POL", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_BLU_VPS-POL/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_BLU_VPS-POL/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_BLU_VPS-POL/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_BLU_VPS-POL.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_BLU_VPS-TRO", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_BLU_VPS-TRO/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_BLU_VPS-TRO/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_BLU_VPS-TRO/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_BLU_VPS-TRO.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_BLU_VSA-CAO", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_BLU_VSA-CAO/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_BLU_VSA-CAO/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_BLU_VSA-CAO/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_BLU_VSA-CAO.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_BLU_VSA-POL", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_BLU_VSA-POL/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_BLU_VSA-POL/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_BLU_VSA-POL/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_BLU_VSA-POL.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_BLU_VSA-TRO", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_BLU_VSA-TRO/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_BLU_VSA-TRO/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_BLU_VSA-TRO/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_BLU_VSA-TRO.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_GRN_TSI", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_GRN_TSI/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_GRN_TSI/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_GRN_TSI/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_GRN_TSI.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_GRN_VBL-CAO", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_GRN_VBL-CAO/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_GRN_VBL-CAO/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_GRN_VBL-CAO/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_GRN_VBL-CAO.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_GRN_VBL-POL", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_GRN_VBL-POL/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_GRN_VBL-POL/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_GRN_VBL-POL/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_GRN_VBL-POL.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_GRN_VBL-TRO", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_GRN_VBL-TRO/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_GRN_VBL-TRO/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_GRN_VBL-TRO/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_GRN_VBL-TRO.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_GRN_VPS-CAO", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_GRN_VPS-CAO/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_GRN_VPS-CAO/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_GRN_VPS-CAO/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_GRN_VPS-CAO.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_GRN_VPS-POL", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_GRN_VPS-POL/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_GRN_VPS-POL/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_GRN_VPS-POL/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_GRN_VPS-POL.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_GRN_VPS-TRO", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_GRN_VPS-TRO/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_GRN_VPS-TRO/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_GRN_VPS-TRO/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_GRN_VPS-TRO.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_GRN_VSA-CAO", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_GRN_VSA-CAO/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_GRN_VSA-CAO/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_GRN_VSA-CAO/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_GRN_VSA-CAO.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_GRN_VSA-POL", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_GRN_VSA-POL/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_GRN_VSA-POL/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_GRN_VSA-POL/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_GRN_VSA-POL.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_GRN_VSA-TRO", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_GRN_VSA-TRO/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_GRN_VSA-TRO/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_GRN_VSA-TRO/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_GRN_VSA-TRO.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NDV_TSI", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NDV_TSI/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NDV_TSI/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NDV_TSI/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_NDV_TSI.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NDV_VBL-CAO", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NDV_VBL-CAO/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NDV_VBL-CAO/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NDV_VBL-CAO/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_NDV_VBL-CAO.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NDV_VBL-POL", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NDV_VBL-POL/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NDV_VBL-POL/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NDV_VBL-POL/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_NDV_VBL-POL.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NDV_VBL-TRO", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NDV_VBL-TRO/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NDV_VBL-TRO/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NDV_VBL-TRO/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_NDV_VBL-TRO.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NDV_VPS-CAO", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NDV_VPS-CAO/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NDV_VPS-CAO/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NDV_VPS-CAO/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_NDV_VPS-CAO.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NDV_VPS-POL", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NDV_VPS-POL/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NDV_VPS-POL/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NDV_VPS-POL/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_NDV_VPS-POL.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NDV_VPS-TRO", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NDV_VPS-TRO/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NDV_VPS-TRO/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NDV_VPS-TRO/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_NDV_VPS-TRO.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NDV_VSA-CAO", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NDV_VSA-CAO/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NDV_VSA-CAO/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NDV_VSA-CAO/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_NDV_VSA-CAO.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NDV_VSA-POL", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NDV_VSA-POL/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NDV_VSA-POL/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NDV_VSA-POL/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_NDV_VSA-POL.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NDV_VSA-TRO", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NDV_VSA-TRO/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NDV_VSA-TRO/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NDV_VSA-TRO/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_NDV_VSA-TRO.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NIR_TSI", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NIR_TSI/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NIR_TSI/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NIR_TSI/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_NIR_TSI.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NIR_VBL-CAO", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NIR_VBL-CAO/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NIR_VBL-CAO/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NIR_VBL-CAO/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_NIR_VBL-CAO.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NIR_VBL-POL", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NIR_VBL-POL/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NIR_VBL-POL/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NIR_VBL-POL/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_NIR_VBL-POL.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NIR_VBL-TRO", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NIR_VBL-TRO/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NIR_VBL-TRO/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NIR_VBL-TRO/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_NIR_VBL-TRO.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NIR_VPS-CAO", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NIR_VPS-CAO/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NIR_VPS-CAO/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NIR_VPS-CAO/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_NIR_VPS-CAO.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NIR_VPS-POL", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NIR_VPS-POL/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NIR_VPS-POL/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NIR_VPS-POL/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_NIR_VPS-POL.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NIR_VPS-TRO", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NIR_VPS-TRO/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NIR_VPS-TRO/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NIR_VPS-TRO/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_NIR_VPS-TRO.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NIR_VSA-CAO", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NIR_VSA-CAO/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NIR_VSA-CAO/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NIR_VSA-CAO/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_NIR_VSA-CAO.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NIR_VSA-POL", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NIR_VSA-POL/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NIR_VSA-POL/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NIR_VSA-POL/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_NIR_VSA-POL.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NIR_VSA-TRO", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NIR_VSA-TRO/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NIR_VSA-TRO/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_NIR_VSA-TRO/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_NIR_VSA-TRO.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_RED_TSI", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_RED_TSI/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_RED_TSI/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_RED_TSI/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_RED_TSI.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_RED_VBL-CAO", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_RED_VBL-CAO/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_RED_VBL-CAO/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_RED_VBL-CAO/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_RED_VBL-CAO.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_RED_VBL-POL", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_RED_VBL-POL/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_RED_VBL-POL/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_RED_VBL-POL/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_RED_VBL-POL.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_RED_VBL-TRO", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_RED_VBL-TRO/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_RED_VBL-TRO/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_RED_VBL-TRO/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_RED_VBL-TRO.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_RED_VPS-CAO", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_RED_VPS-CAO/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_RED_VPS-CAO/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_RED_VPS-CAO/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_RED_VPS-CAO.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_RED_VPS-POL", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_RED_VPS-POL/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_RED_VPS-POL/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_RED_VPS-POL/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_RED_VPS-POL.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_RED_VPS-TRO", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_RED_VPS-TRO/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_RED_VPS-TRO/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_RED_VPS-TRO/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_RED_VPS-TRO.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_RED_VSA-CAO", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_RED_VSA-CAO/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_RED_VSA-CAO/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_RED_VSA-CAO/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_RED_VSA-CAO.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_RED_VSA-POL", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_RED_VSA-POL/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_RED_VSA-POL/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_RED_VSA-POL/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_RED_VSA-POL.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_RED_VSA-TRO", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_RED_VSA-TRO/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_RED_VSA-TRO/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_RED_VSA-TRO/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_RED_VSA-TRO.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SMA_TSI", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SMA_TSI/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SMA_TSI/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SMA_TSI/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_SMA_TSI.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SMA_VBL-CAO", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SMA_VBL-CAO/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SMA_VBL-CAO/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SMA_VBL-CAO/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_SMA_VBL-CAO.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SMA_VBL-POL", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SMA_VBL-POL/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SMA_VBL-POL/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SMA_VBL-POL/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_SMA_VBL-POL.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SMA_VBL-TRO", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SMA_VBL-TRO/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SMA_VBL-TRO/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SMA_VBL-TRO/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_SMA_VBL-TRO.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SMA_VPS-CAO", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SMA_VPS-CAO/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SMA_VPS-CAO/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SMA_VPS-CAO/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_SMA_VPS-CAO.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SMA_VPS-POL", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SMA_VPS-POL/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SMA_VPS-POL/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SMA_VPS-POL/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_SMA_VPS-POL.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SMA_VPS-TRO", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SMA_VPS-TRO/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SMA_VPS-TRO/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SMA_VPS-TRO/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_SMA_VPS-TRO.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SMA_VSA-CAO", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SMA_VSA-CAO/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SMA_VSA-CAO/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SMA_VSA-CAO/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_SMA_VSA-CAO.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SMA_VSA-POL", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SMA_VSA-POL/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SMA_VSA-POL/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SMA_VSA-POL/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_SMA_VSA-POL.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SMA_VSA-TRO", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SMA_VSA-TRO/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SMA_VSA-TRO/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SMA_VSA-TRO/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_SMA_VSA-TRO.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW1_TSI", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW1_TSI/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW1_TSI/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW1_TSI/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_SW1_TSI.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW1_VBL-CAO", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW1_VBL-CAO/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW1_VBL-CAO/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW1_VBL-CAO/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_SW1_VBL-CAO.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW1_VBL-POL", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW1_VBL-POL/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW1_VBL-POL/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW1_VBL-POL/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_SW1_VBL-POL.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW1_VBL-TRO", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW1_VBL-TRO/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW1_VBL-TRO/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW1_VBL-TRO/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_SW1_VBL-TRO.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW1_VPS-CAO", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW1_VPS-CAO/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW1_VPS-CAO/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW1_VPS-CAO/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_SW1_VPS-CAO.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW1_VPS-POL", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW1_VPS-POL/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW1_VPS-POL/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW1_VPS-POL/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_SW1_VPS-POL.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW1_VPS-TRO", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW1_VPS-TRO/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW1_VPS-TRO/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW1_VPS-TRO/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_SW1_VPS-TRO.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW1_VSA-CAO", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW1_VSA-CAO/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW1_VSA-CAO/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW1_VSA-CAO/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_SW1_VSA-CAO.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW1_VSA-POL", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW1_VSA-POL/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW1_VSA-POL/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW1_VSA-POL/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_SW1_VSA-POL.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW1_VSA-TRO", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW1_VSA-TRO/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW1_VSA-TRO/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW1_VSA-TRO/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_SW1_VSA-TRO.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW2_TSI", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW2_TSI/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW2_TSI/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW2_TSI/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_SW2_TSI.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW2_VBL-CAO", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW2_VBL-CAO/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW2_VBL-CAO/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW2_VBL-CAO/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_SW2_VBL-CAO.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW2_VBL-POL", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW2_VBL-POL/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW2_VBL-POL/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW2_VBL-POL/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_SW2_VBL-POL.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW2_VBL-TRO", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW2_VBL-TRO/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW2_VBL-TRO/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW2_VBL-TRO/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_SW2_VBL-TRO.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW2_VPS-CAO", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW2_VPS-CAO/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW2_VPS-CAO/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW2_VPS-CAO/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_SW2_VPS-CAO.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW2_VPS-POL", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW2_VPS-POL/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW2_VPS-POL/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW2_VPS-POL/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_SW2_VPS-POL.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW2_VPS-TRO", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW2_VPS-TRO/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW2_VPS-TRO/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW2_VPS-TRO/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_SW2_VPS-TRO.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW2_VSA-CAO", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW2_VSA-CAO/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW2_VSA-CAO/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW2_VSA-CAO/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_SW2_VSA-CAO.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW2_VSA-POL", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW2_VSA-POL/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW2_VSA-POL/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW2_VSA-POL/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_SW2_VSA-POL.tif.ovr", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW2_VSA-TRO", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW2_VSA-TRO/trend", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW2_VSA-TRO/trend/X0109_Y0102", + "trend/pyramid/1987-1989_001-365_HL_TSA_LNDLG_SW2_VSA-TRO/trend/X0109_Y0102/X0109_Y0102_1987-1989_001-365_HL_TSA_LNDLG_SW2_VSA-TRO.tif.ovr", + "trend/pyramid/versions.yml", + "untar", + "untar/Landsat_data", + "untar/dem", + "untar/wvdb" + ] + ], + "meta": { + "nf-test": "0.9.1", + "nextflow": "24.10.0" + }, + "timestamp": "2024-11-24T15:08:30.683117395" + } +} \ No newline at end of file diff --git a/tests/tweaked_params.nf.test b/tests/tweaked_params.nf.test new file mode 100644 index 0000000..f2a170c --- /dev/null +++ b/tests/tweaked_params.nf.test @@ -0,0 +1,32 @@ +nextflow_pipeline { + + name "Test pipeline with non-default parameters" + script "../main.nf" + + test("Params: --save_ard true --save_tsa true --return_tss true --sensors_level2 'LND05' --indexes 'RED NIR SWIR2' --end_date '1988-12-31'") { + + when { + params { + outdir = "$outputDir" + save_ard = true + save_tsa = true + return_tss = true + sensors_level2 = "LND05" + indexes = "RED NIR SWIR2" + end_date = "1988-12-31" + } + } + + then { + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + assert workflow.success + assert snapshot( + workflow.trace.succeeded().size(), + stable_name, + ).match() + + } + + } + +} diff --git a/tests/tweaked_params.nf.test.snap b/tests/tweaked_params.nf.test.snap new file mode 100644 index 0000000..00dc346 --- /dev/null +++ b/tests/tweaked_params.nf.test.snap @@ -0,0 +1,947 @@ +{ + "Params: --save_ard true --save_tsa true --return_tss true --sensors_level2 'LND05' --indexes 'RED NIR SWIR2' --end_date '1988-12-31'": { + "content": [ + 168, + [ + "higher-level", + "higher-level/X0109_Y0102", + "higher-level/X0109_Y0102/param_files", + "higher-level/X0109_Y0102/param_files/trend_X0109_Y0102.prm", + "higher-level/X0109_Y0102/trend_files", + "higher-level/X0109_Y0102/trend_files/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_NIR_TSI.tif", + "higher-level/X0109_Y0102/trend_files/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_NIR_TSS.tif", + "higher-level/X0109_Y0102/trend_files/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_NIR_VBL-CAO.tif", + "higher-level/X0109_Y0102/trend_files/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_NIR_VBL-POL.tif", + "higher-level/X0109_Y0102/trend_files/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_NIR_VBL-TRO.tif", + "higher-level/X0109_Y0102/trend_files/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_NIR_VPS-CAO.tif", + "higher-level/X0109_Y0102/trend_files/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_NIR_VPS-POL.tif", + "higher-level/X0109_Y0102/trend_files/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_NIR_VPS-TRO.tif", + "higher-level/X0109_Y0102/trend_files/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_NIR_VSA-CAO.tif", + "higher-level/X0109_Y0102/trend_files/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_NIR_VSA-POL.tif", + "higher-level/X0109_Y0102/trend_files/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_NIR_VSA-TRO.tif", + "higher-level/X0109_Y0102/trend_files/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_RED_TSI.tif", + "higher-level/X0109_Y0102/trend_files/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_RED_TSS.tif", + "higher-level/X0109_Y0102/trend_files/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_RED_VBL-CAO.tif", + "higher-level/X0109_Y0102/trend_files/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_RED_VBL-POL.tif", + "higher-level/X0109_Y0102/trend_files/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_RED_VBL-TRO.tif", + "higher-level/X0109_Y0102/trend_files/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_RED_VPS-CAO.tif", + "higher-level/X0109_Y0102/trend_files/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_RED_VPS-POL.tif", + "higher-level/X0109_Y0102/trend_files/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_RED_VPS-TRO.tif", + "higher-level/X0109_Y0102/trend_files/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_RED_VSA-CAO.tif", + "higher-level/X0109_Y0102/trend_files/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_RED_VSA-POL.tif", + "higher-level/X0109_Y0102/trend_files/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_RED_VSA-TRO.tif", + "higher-level/X0109_Y0102/trend_files/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_SMA_TSI.tif", + "higher-level/X0109_Y0102/trend_files/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_SMA_TSS.tif", + "higher-level/X0109_Y0102/trend_files/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_SMA_VBL-CAO.tif", + "higher-level/X0109_Y0102/trend_files/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_SMA_VBL-POL.tif", + "higher-level/X0109_Y0102/trend_files/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_SMA_VBL-TRO.tif", + "higher-level/X0109_Y0102/trend_files/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_SMA_VPS-CAO.tif", + "higher-level/X0109_Y0102/trend_files/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_SMA_VPS-POL.tif", + "higher-level/X0109_Y0102/trend_files/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_SMA_VPS-TRO.tif", + "higher-level/X0109_Y0102/trend_files/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_SMA_VSA-CAO.tif", + "higher-level/X0109_Y0102/trend_files/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_SMA_VSA-POL.tif", + "higher-level/X0109_Y0102/trend_files/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_SMA_VSA-TRO.tif", + "higher-level/X0109_Y0102/trend_files/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_SW2_TSI.tif", + "higher-level/X0109_Y0102/trend_files/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_SW2_TSS.tif", + "higher-level/X0109_Y0102/trend_files/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_SW2_VBL-CAO.tif", + "higher-level/X0109_Y0102/trend_files/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_SW2_VBL-POL.tif", + "higher-level/X0109_Y0102/trend_files/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_SW2_VBL-TRO.tif", + "higher-level/X0109_Y0102/trend_files/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_SW2_VPS-CAO.tif", + "higher-level/X0109_Y0102/trend_files/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_SW2_VPS-POL.tif", + "higher-level/X0109_Y0102/trend_files/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_SW2_VPS-TRO.tif", + "higher-level/X0109_Y0102/trend_files/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_SW2_VSA-CAO.tif", + "higher-level/X0109_Y0102/trend_files/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_SW2_VSA-POL.tif", + "higher-level/X0109_Y0102/trend_files/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_SW2_VSA-TRO.tif", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_data/multiqc.log", + "multiqc/multiqc_data/multiqc_citations.txt", + "multiqc/multiqc_data/multiqc_data.json", + "multiqc/multiqc_data/multiqc_software_versions.txt", + "multiqc/multiqc_data/multiqc_sources.txt", + "multiqc/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_pipeline_software_mqc_versions.yml", + "preparation", + "preparation/mask", + "preparation/mask/X0103_Y0101", + "preparation/mask/X0103_Y0101/aoi.tif", + "preparation/mask/X0103_Y0102", + "preparation/mask/X0103_Y0102/aoi.tif", + "preparation/mask/X0103_Y0103", + "preparation/mask/X0103_Y0103/aoi.tif", + "preparation/mask/X0103_Y0104", + "preparation/mask/X0103_Y0104/aoi.tif", + "preparation/mask/X0103_Y0105", + "preparation/mask/X0103_Y0105/aoi.tif", + "preparation/mask/X0104_Y0101", + "preparation/mask/X0104_Y0101/aoi.tif", + "preparation/mask/X0104_Y0102", + "preparation/mask/X0104_Y0102/aoi.tif", + "preparation/mask/X0104_Y0103", + "preparation/mask/X0104_Y0103/aoi.tif", + "preparation/mask/X0104_Y0104", + "preparation/mask/X0104_Y0104/aoi.tif", + "preparation/mask/X0104_Y0105", + "preparation/mask/X0104_Y0105/aoi.tif", + "preparation/mask/X0105_Y0101", + "preparation/mask/X0105_Y0101/aoi.tif", + "preparation/mask/X0105_Y0102", + "preparation/mask/X0105_Y0102/aoi.tif", + "preparation/mask/X0105_Y0103", + "preparation/mask/X0105_Y0103/aoi.tif", + "preparation/mask/X0105_Y0104", + "preparation/mask/X0105_Y0104/aoi.tif", + "preparation/mask/X0105_Y0105", + "preparation/mask/X0105_Y0105/aoi.tif", + "preparation/mask/X0106_Y0101", + "preparation/mask/X0106_Y0101/aoi.tif", + "preparation/mask/X0106_Y0102", + "preparation/mask/X0106_Y0102/aoi.tif", + "preparation/mask/X0106_Y0103", + "preparation/mask/X0106_Y0103/aoi.tif", + "preparation/mask/X0106_Y0104", + "preparation/mask/X0106_Y0104/aoi.tif", + "preparation/mask/X0106_Y0105", + "preparation/mask/X0106_Y0105/aoi.tif", + "preparation/mask/X0107_Y0101", + "preparation/mask/X0107_Y0101/aoi.tif", + "preparation/mask/X0107_Y0102", + "preparation/mask/X0107_Y0102/aoi.tif", + "preparation/mask/X0107_Y0103", + "preparation/mask/X0107_Y0103/aoi.tif", + "preparation/mask/X0107_Y0104", + "preparation/mask/X0107_Y0104/aoi.tif", + "preparation/mask/X0107_Y0105", + "preparation/mask/X0107_Y0105/aoi.tif", + "preparation/mask/X0108_Y0101", + "preparation/mask/X0108_Y0101/aoi.tif", + "preparation/mask/X0108_Y0102", + "preparation/mask/X0108_Y0102/aoi.tif", + "preparation/mask/X0108_Y0103", + "preparation/mask/X0108_Y0103/aoi.tif", + "preparation/mask/X0108_Y0104", + "preparation/mask/X0108_Y0104/aoi.tif", + "preparation/mask/X0108_Y0105", + "preparation/mask/X0108_Y0105/aoi.tif", + "preparation/mask/X0109_Y0101", + "preparation/mask/X0109_Y0101/aoi.tif", + "preparation/mask/X0109_Y0102", + "preparation/mask/X0109_Y0102/aoi.tif", + "preparation/mask/X0109_Y0103", + "preparation/mask/X0109_Y0103/aoi.tif", + "preparation/mask/X0109_Y0104", + "preparation/mask/X0109_Y0104/aoi.tif", + "preparation/mask/X0109_Y0105", + "preparation/mask/X0109_Y0105/aoi.tif", + "preparation/mask/X0110_Y0101", + "preparation/mask/X0110_Y0101/aoi.tif", + "preparation/mask/X0110_Y0102", + "preparation/mask/X0110_Y0102/aoi.tif", + "preparation/mask/X0110_Y0103", + "preparation/mask/X0110_Y0103/aoi.tif", + "preparation/mask/X0110_Y0104", + "preparation/mask/X0110_Y0104/aoi.tif", + "preparation/mask/X0110_Y0105", + "preparation/mask/X0110_Y0105/aoi.tif", + "preparation/mask/X0111_Y0101", + "preparation/mask/X0111_Y0101/aoi.tif", + "preparation/mask/X0111_Y0102", + "preparation/mask/X0111_Y0102/aoi.tif", + "preparation/mask/X0111_Y0103", + "preparation/mask/X0111_Y0103/aoi.tif", + "preparation/mask/X0111_Y0104", + "preparation/mask/X0111_Y0104/aoi.tif", + "preparation/mask/X0111_Y0105", + "preparation/mask/X0111_Y0105/aoi.tif", + "preparation/tile_allow.txt", + "preprocess", + "preprocess/LT04_L1TP_181036_19880130_20200917_02_T1", + "preprocess/LT04_L1TP_181036_19880130_20200917_02_T1/level2_ard", + "preprocess/LT04_L1TP_181036_19880130_20200917_02_T1/level2_ard/X0109_Y0102", + "preprocess/LT04_L1TP_181036_19880130_20200917_02_T1/level2_ard/X0109_Y0102/19880130_LEVEL2_LND04_BOA.tif", + "preprocess/LT04_L1TP_181036_19880130_20200917_02_T1/level2_ard/X0109_Y0102/19880130_LEVEL2_LND04_QAI.tif", + "preprocess/LT04_L1TP_181036_19880130_20200917_02_T1/logs", + "preprocess/LT04_L1TP_181036_19880130_20200917_02_T1/logs/level2_log", + "preprocess/LT04_L1TP_181036_19880130_20200917_02_T1/logs/level2_log/LT04_L1TP_181036_19880130_20200917_02_T1.log", + "preprocess/LT04_L1TP_181036_19880130_20200917_02_T1/param_files", + "preprocess/LT04_L1TP_181036_19880130_20200917_02_T1/param_files/LT04_L1TP_181036_19880130_20200917_02_T1.prm", + "preprocess/LT04_L1TP_181036_19881129_20200917_02_T1", + "preprocess/LT04_L1TP_181036_19881129_20200917_02_T1/level2_ard", + "preprocess/LT04_L1TP_181036_19881129_20200917_02_T1/level2_ard/X0109_Y0102", + "preprocess/LT04_L1TP_181036_19881129_20200917_02_T1/level2_ard/X0109_Y0102/19881129_LEVEL2_LND04_BOA.tif", + "preprocess/LT04_L1TP_181036_19881129_20200917_02_T1/level2_ard/X0109_Y0102/19881129_LEVEL2_LND04_QAI.tif", + "preprocess/LT04_L1TP_181036_19881129_20200917_02_T1/logs", + "preprocess/LT04_L1TP_181036_19881129_20200917_02_T1/logs/level2_log", + "preprocess/LT04_L1TP_181036_19881129_20200917_02_T1/logs/level2_log/LT04_L1TP_181036_19881129_20200917_02_T1.log", + "preprocess/LT04_L1TP_181036_19881129_20200917_02_T1/param_files", + "preprocess/LT04_L1TP_181036_19881129_20200917_02_T1/param_files/LT04_L1TP_181036_19881129_20200917_02_T1.prm", + "preprocess/LT04_L1TP_181036_19881231_20200916_02_T1", + "preprocess/LT04_L1TP_181036_19881231_20200916_02_T1/logs", + "preprocess/LT04_L1TP_181036_19881231_20200916_02_T1/logs/level2_log", + "preprocess/LT04_L1TP_181036_19881231_20200916_02_T1/logs/level2_log/LT04_L1TP_181036_19881231_20200916_02_T1.log", + "preprocess/LT04_L1TP_181036_19881231_20200916_02_T1/param_files", + "preprocess/LT04_L1TP_181036_19881231_20200916_02_T1/param_files/LT04_L1TP_181036_19881231_20200916_02_T1.prm", + "preprocess/LT05_L1TP_181036_19870119_20201014_02_T1", + "preprocess/LT05_L1TP_181036_19870119_20201014_02_T1/level2_ard", + "preprocess/LT05_L1TP_181036_19870119_20201014_02_T1/level2_ard/X0109_Y0102", + "preprocess/LT05_L1TP_181036_19870119_20201014_02_T1/level2_ard/X0109_Y0102/19870119_LEVEL2_LND05_BOA.tif", + "preprocess/LT05_L1TP_181036_19870119_20201014_02_T1/level2_ard/X0109_Y0102/19870119_LEVEL2_LND05_QAI.tif", + "preprocess/LT05_L1TP_181036_19870119_20201014_02_T1/logs", + "preprocess/LT05_L1TP_181036_19870119_20201014_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19870119_20201014_02_T1/logs/level2_log/LT05_L1TP_181036_19870119_20201014_02_T1.log", + "preprocess/LT05_L1TP_181036_19870119_20201014_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19870119_20201014_02_T1/param_files/LT05_L1TP_181036_19870119_20201014_02_T1.prm", + "preprocess/LT05_L1TP_181036_19870204_20201014_02_T1", + "preprocess/LT05_L1TP_181036_19870204_20201014_02_T1/logs", + "preprocess/LT05_L1TP_181036_19870204_20201014_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19870204_20201014_02_T1/logs/level2_log/LT05_L1TP_181036_19870204_20201014_02_T1.log", + "preprocess/LT05_L1TP_181036_19870204_20201014_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19870204_20201014_02_T1/param_files/LT05_L1TP_181036_19870204_20201014_02_T1.prm", + "preprocess/LT05_L1TP_181036_19870324_20211112_02_T1", + "preprocess/LT05_L1TP_181036_19870324_20211112_02_T1/level2_ard", + "preprocess/LT05_L1TP_181036_19870324_20211112_02_T1/level2_ard/X0109_Y0102", + "preprocess/LT05_L1TP_181036_19870324_20211112_02_T1/level2_ard/X0109_Y0102/19870324_LEVEL2_LND05_BOA.tif", + "preprocess/LT05_L1TP_181036_19870324_20211112_02_T1/level2_ard/X0109_Y0102/19870324_LEVEL2_LND05_QAI.tif", + "preprocess/LT05_L1TP_181036_19870324_20211112_02_T1/logs", + "preprocess/LT05_L1TP_181036_19870324_20211112_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19870324_20211112_02_T1/logs/level2_log/LT05_L1TP_181036_19870324_20211112_02_T1.log", + "preprocess/LT05_L1TP_181036_19870324_20211112_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19870324_20211112_02_T1/param_files/LT05_L1TP_181036_19870324_20211112_02_T1.prm", + "preprocess/LT05_L1TP_181036_19870409_20201014_02_T1", + "preprocess/LT05_L1TP_181036_19870409_20201014_02_T1/level2_ard", + "preprocess/LT05_L1TP_181036_19870409_20201014_02_T1/level2_ard/X0109_Y0102", + "preprocess/LT05_L1TP_181036_19870409_20201014_02_T1/level2_ard/X0109_Y0102/19870409_LEVEL2_LND05_BOA.tif", + "preprocess/LT05_L1TP_181036_19870409_20201014_02_T1/level2_ard/X0109_Y0102/19870409_LEVEL2_LND05_QAI.tif", + "preprocess/LT05_L1TP_181036_19870409_20201014_02_T1/logs", + "preprocess/LT05_L1TP_181036_19870409_20201014_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19870409_20201014_02_T1/logs/level2_log/LT05_L1TP_181036_19870409_20201014_02_T1.log", + "preprocess/LT05_L1TP_181036_19870409_20201014_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19870409_20201014_02_T1/param_files/LT05_L1TP_181036_19870409_20201014_02_T1.prm", + "preprocess/LT05_L1TP_181036_19870425_20201014_02_T1", + "preprocess/LT05_L1TP_181036_19870425_20201014_02_T1/level2_ard", + "preprocess/LT05_L1TP_181036_19870425_20201014_02_T1/level2_ard/X0109_Y0102", + "preprocess/LT05_L1TP_181036_19870425_20201014_02_T1/level2_ard/X0109_Y0102/19870425_LEVEL2_LND05_BOA.tif", + "preprocess/LT05_L1TP_181036_19870425_20201014_02_T1/level2_ard/X0109_Y0102/19870425_LEVEL2_LND05_QAI.tif", + "preprocess/LT05_L1TP_181036_19870425_20201014_02_T1/logs", + "preprocess/LT05_L1TP_181036_19870425_20201014_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19870425_20201014_02_T1/logs/level2_log/LT05_L1TP_181036_19870425_20201014_02_T1.log", + "preprocess/LT05_L1TP_181036_19870425_20201014_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19870425_20201014_02_T1/param_files/LT05_L1TP_181036_19870425_20201014_02_T1.prm", + "preprocess/LT05_L1TP_181036_19870511_20201014_02_T1", + "preprocess/LT05_L1TP_181036_19870511_20201014_02_T1/level2_ard", + "preprocess/LT05_L1TP_181036_19870511_20201014_02_T1/level2_ard/X0109_Y0102", + "preprocess/LT05_L1TP_181036_19870511_20201014_02_T1/level2_ard/X0109_Y0102/19870511_LEVEL2_LND05_BOA.tif", + "preprocess/LT05_L1TP_181036_19870511_20201014_02_T1/level2_ard/X0109_Y0102/19870511_LEVEL2_LND05_QAI.tif", + "preprocess/LT05_L1TP_181036_19870511_20201014_02_T1/logs", + "preprocess/LT05_L1TP_181036_19870511_20201014_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19870511_20201014_02_T1/logs/level2_log/LT05_L1TP_181036_19870511_20201014_02_T1.log", + "preprocess/LT05_L1TP_181036_19870511_20201014_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19870511_20201014_02_T1/param_files/LT05_L1TP_181036_19870511_20201014_02_T1.prm", + "preprocess/LT05_L1TP_181036_19870527_20211113_02_T1", + "preprocess/LT05_L1TP_181036_19870527_20211113_02_T1/level2_ard", + "preprocess/LT05_L1TP_181036_19870527_20211113_02_T1/level2_ard/X0109_Y0102", + "preprocess/LT05_L1TP_181036_19870527_20211113_02_T1/level2_ard/X0109_Y0102/19870527_LEVEL2_LND05_BOA.tif", + "preprocess/LT05_L1TP_181036_19870527_20211113_02_T1/level2_ard/X0109_Y0102/19870527_LEVEL2_LND05_QAI.tif", + "preprocess/LT05_L1TP_181036_19870527_20211113_02_T1/logs", + "preprocess/LT05_L1TP_181036_19870527_20211113_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19870527_20211113_02_T1/logs/level2_log/LT05_L1TP_181036_19870527_20211113_02_T1.log", + "preprocess/LT05_L1TP_181036_19870527_20211113_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19870527_20211113_02_T1/param_files/LT05_L1TP_181036_19870527_20211113_02_T1.prm", + "preprocess/LT05_L1TP_181036_19870612_20201014_02_T1", + "preprocess/LT05_L1TP_181036_19870612_20201014_02_T1/level2_ard", + "preprocess/LT05_L1TP_181036_19870612_20201014_02_T1/level2_ard/X0109_Y0102", + "preprocess/LT05_L1TP_181036_19870612_20201014_02_T1/level2_ard/X0109_Y0102/19870612_LEVEL2_LND05_BOA.tif", + "preprocess/LT05_L1TP_181036_19870612_20201014_02_T1/level2_ard/X0109_Y0102/19870612_LEVEL2_LND05_QAI.tif", + "preprocess/LT05_L1TP_181036_19870612_20201014_02_T1/logs", + "preprocess/LT05_L1TP_181036_19870612_20201014_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19870612_20201014_02_T1/logs/level2_log/LT05_L1TP_181036_19870612_20201014_02_T1.log", + "preprocess/LT05_L1TP_181036_19870612_20201014_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19870612_20201014_02_T1/param_files/LT05_L1TP_181036_19870612_20201014_02_T1.prm", + "preprocess/LT05_L1TP_181036_19870628_20201014_02_T1", + "preprocess/LT05_L1TP_181036_19870628_20201014_02_T1/level2_ard", + "preprocess/LT05_L1TP_181036_19870628_20201014_02_T1/level2_ard/X0109_Y0102", + "preprocess/LT05_L1TP_181036_19870628_20201014_02_T1/level2_ard/X0109_Y0102/19870628_LEVEL2_LND05_BOA.tif", + "preprocess/LT05_L1TP_181036_19870628_20201014_02_T1/level2_ard/X0109_Y0102/19870628_LEVEL2_LND05_QAI.tif", + "preprocess/LT05_L1TP_181036_19870628_20201014_02_T1/logs", + "preprocess/LT05_L1TP_181036_19870628_20201014_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19870628_20201014_02_T1/logs/level2_log/LT05_L1TP_181036_19870628_20201014_02_T1.log", + "preprocess/LT05_L1TP_181036_19870628_20201014_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19870628_20201014_02_T1/param_files/LT05_L1TP_181036_19870628_20201014_02_T1.prm", + "preprocess/LT05_L1TP_181036_19870714_20201014_02_T1", + "preprocess/LT05_L1TP_181036_19870714_20201014_02_T1/level2_ard", + "preprocess/LT05_L1TP_181036_19870714_20201014_02_T1/level2_ard/X0109_Y0102", + "preprocess/LT05_L1TP_181036_19870714_20201014_02_T1/level2_ard/X0109_Y0102/19870714_LEVEL2_LND05_BOA.tif", + "preprocess/LT05_L1TP_181036_19870714_20201014_02_T1/level2_ard/X0109_Y0102/19870714_LEVEL2_LND05_QAI.tif", + "preprocess/LT05_L1TP_181036_19870714_20201014_02_T1/logs", + "preprocess/LT05_L1TP_181036_19870714_20201014_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19870714_20201014_02_T1/logs/level2_log/LT05_L1TP_181036_19870714_20201014_02_T1.log", + "preprocess/LT05_L1TP_181036_19870714_20201014_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19870714_20201014_02_T1/param_files/LT05_L1TP_181036_19870714_20201014_02_T1.prm", + "preprocess/LT05_L1TP_181036_19870730_20201014_02_T1", + "preprocess/LT05_L1TP_181036_19870730_20201014_02_T1/level2_ard", + "preprocess/LT05_L1TP_181036_19870730_20201014_02_T1/level2_ard/X0109_Y0102", + "preprocess/LT05_L1TP_181036_19870730_20201014_02_T1/level2_ard/X0109_Y0102/19870730_LEVEL2_LND05_BOA.tif", + "preprocess/LT05_L1TP_181036_19870730_20201014_02_T1/level2_ard/X0109_Y0102/19870730_LEVEL2_LND05_QAI.tif", + "preprocess/LT05_L1TP_181036_19870730_20201014_02_T1/logs", + "preprocess/LT05_L1TP_181036_19870730_20201014_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19870730_20201014_02_T1/logs/level2_log/LT05_L1TP_181036_19870730_20201014_02_T1.log", + "preprocess/LT05_L1TP_181036_19870730_20201014_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19870730_20201014_02_T1/param_files/LT05_L1TP_181036_19870730_20201014_02_T1.prm", + "preprocess/LT05_L1TP_181036_19870815_20201014_02_T1", + "preprocess/LT05_L1TP_181036_19870815_20201014_02_T1/level2_ard", + "preprocess/LT05_L1TP_181036_19870815_20201014_02_T1/level2_ard/X0109_Y0102", + "preprocess/LT05_L1TP_181036_19870815_20201014_02_T1/level2_ard/X0109_Y0102/19870815_LEVEL2_LND05_BOA.tif", + "preprocess/LT05_L1TP_181036_19870815_20201014_02_T1/level2_ard/X0109_Y0102/19870815_LEVEL2_LND05_QAI.tif", + "preprocess/LT05_L1TP_181036_19870815_20201014_02_T1/logs", + "preprocess/LT05_L1TP_181036_19870815_20201014_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19870815_20201014_02_T1/logs/level2_log/LT05_L1TP_181036_19870815_20201014_02_T1.log", + "preprocess/LT05_L1TP_181036_19870815_20201014_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19870815_20201014_02_T1/param_files/LT05_L1TP_181036_19870815_20201014_02_T1.prm", + "preprocess/LT05_L1TP_181036_19870831_20201014_02_T1", + "preprocess/LT05_L1TP_181036_19870831_20201014_02_T1/level2_ard", + "preprocess/LT05_L1TP_181036_19870831_20201014_02_T1/level2_ard/X0109_Y0102", + "preprocess/LT05_L1TP_181036_19870831_20201014_02_T1/level2_ard/X0109_Y0102/19870831_LEVEL2_LND05_BOA.tif", + "preprocess/LT05_L1TP_181036_19870831_20201014_02_T1/level2_ard/X0109_Y0102/19870831_LEVEL2_LND05_QAI.tif", + "preprocess/LT05_L1TP_181036_19870831_20201014_02_T1/logs", + "preprocess/LT05_L1TP_181036_19870831_20201014_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19870831_20201014_02_T1/logs/level2_log/LT05_L1TP_181036_19870831_20201014_02_T1.log", + "preprocess/LT05_L1TP_181036_19870831_20201014_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19870831_20201014_02_T1/param_files/LT05_L1TP_181036_19870831_20201014_02_T1.prm", + "preprocess/LT05_L1TP_181036_19870916_20201014_02_T1", + "preprocess/LT05_L1TP_181036_19870916_20201014_02_T1/level2_ard", + "preprocess/LT05_L1TP_181036_19870916_20201014_02_T1/level2_ard/X0109_Y0102", + "preprocess/LT05_L1TP_181036_19870916_20201014_02_T1/level2_ard/X0109_Y0102/19870916_LEVEL2_LND05_BOA.tif", + "preprocess/LT05_L1TP_181036_19870916_20201014_02_T1/level2_ard/X0109_Y0102/19870916_LEVEL2_LND05_QAI.tif", + "preprocess/LT05_L1TP_181036_19870916_20201014_02_T1/logs", + "preprocess/LT05_L1TP_181036_19870916_20201014_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19870916_20201014_02_T1/logs/level2_log/LT05_L1TP_181036_19870916_20201014_02_T1.log", + "preprocess/LT05_L1TP_181036_19870916_20201014_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19870916_20201014_02_T1/param_files/LT05_L1TP_181036_19870916_20201014_02_T1.prm", + "preprocess/LT05_L1TP_181036_19871002_20201014_02_T1", + "preprocess/LT05_L1TP_181036_19871002_20201014_02_T1/level2_ard", + "preprocess/LT05_L1TP_181036_19871002_20201014_02_T1/level2_ard/X0109_Y0102", + "preprocess/LT05_L1TP_181036_19871002_20201014_02_T1/level2_ard/X0109_Y0102/19871002_LEVEL2_LND05_BOA.tif", + "preprocess/LT05_L1TP_181036_19871002_20201014_02_T1/level2_ard/X0109_Y0102/19871002_LEVEL2_LND05_QAI.tif", + "preprocess/LT05_L1TP_181036_19871002_20201014_02_T1/logs", + "preprocess/LT05_L1TP_181036_19871002_20201014_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19871002_20201014_02_T1/logs/level2_log/LT05_L1TP_181036_19871002_20201014_02_T1.log", + "preprocess/LT05_L1TP_181036_19871002_20201014_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19871002_20201014_02_T1/param_files/LT05_L1TP_181036_19871002_20201014_02_T1.prm", + "preprocess/LT05_L1TP_181036_19871205_20201014_02_T1", + "preprocess/LT05_L1TP_181036_19871205_20201014_02_T1/logs", + "preprocess/LT05_L1TP_181036_19871205_20201014_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19871205_20201014_02_T1/logs/level2_log/LT05_L1TP_181036_19871205_20201014_02_T1.log", + "preprocess/LT05_L1TP_181036_19871205_20201014_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19871205_20201014_02_T1/param_files/LT05_L1TP_181036_19871205_20201014_02_T1.prm", + "preprocess/LT05_L1TP_181036_19880106_20211116_02_T1", + "preprocess/LT05_L1TP_181036_19880106_20211116_02_T1/level2_ard", + "preprocess/LT05_L1TP_181036_19880106_20211116_02_T1/level2_ard/X0109_Y0102", + "preprocess/LT05_L1TP_181036_19880106_20211116_02_T1/level2_ard/X0109_Y0102/19880106_LEVEL2_LND05_BOA.tif", + "preprocess/LT05_L1TP_181036_19880106_20211116_02_T1/level2_ard/X0109_Y0102/19880106_LEVEL2_LND05_QAI.tif", + "preprocess/LT05_L1TP_181036_19880106_20211116_02_T1/logs", + "preprocess/LT05_L1TP_181036_19880106_20211116_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19880106_20211116_02_T1/logs/level2_log/LT05_L1TP_181036_19880106_20211116_02_T1.log", + "preprocess/LT05_L1TP_181036_19880106_20211116_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19880106_20211116_02_T1/param_files/LT05_L1TP_181036_19880106_20211116_02_T1.prm", + "preprocess/LT05_L1TP_181036_19880122_20200917_02_T1", + "preprocess/LT05_L1TP_181036_19880122_20200917_02_T1/level2_ard", + "preprocess/LT05_L1TP_181036_19880122_20200917_02_T1/level2_ard/X0109_Y0102", + "preprocess/LT05_L1TP_181036_19880122_20200917_02_T1/level2_ard/X0109_Y0102/19880122_LEVEL2_LND05_BOA.tif", + "preprocess/LT05_L1TP_181036_19880122_20200917_02_T1/level2_ard/X0109_Y0102/19880122_LEVEL2_LND05_QAI.tif", + "preprocess/LT05_L1TP_181036_19880122_20200917_02_T1/logs", + "preprocess/LT05_L1TP_181036_19880122_20200917_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19880122_20200917_02_T1/logs/level2_log/LT05_L1TP_181036_19880122_20200917_02_T1.log", + "preprocess/LT05_L1TP_181036_19880122_20200917_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19880122_20200917_02_T1/param_files/LT05_L1TP_181036_19880122_20200917_02_T1.prm", + "preprocess/LT05_L1TP_181036_19880223_20200917_02_T1", + "preprocess/LT05_L1TP_181036_19880223_20200917_02_T1/logs", + "preprocess/LT05_L1TP_181036_19880223_20200917_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19880223_20200917_02_T1/logs/level2_log/LT05_L1TP_181036_19880223_20200917_02_T1.log", + "preprocess/LT05_L1TP_181036_19880223_20200917_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19880223_20200917_02_T1/param_files/LT05_L1TP_181036_19880223_20200917_02_T1.prm", + "preprocess/LT05_L1TP_181036_19880310_20200917_02_T1", + "preprocess/LT05_L1TP_181036_19880310_20200917_02_T1/logs", + "preprocess/LT05_L1TP_181036_19880310_20200917_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19880310_20200917_02_T1/logs/level2_log/LT05_L1TP_181036_19880310_20200917_02_T1.log", + "preprocess/LT05_L1TP_181036_19880310_20200917_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19880310_20200917_02_T1/param_files/LT05_L1TP_181036_19880310_20200917_02_T1.prm", + "preprocess/LT05_L1TP_181036_19880326_20200917_02_T1", + "preprocess/LT05_L1TP_181036_19880326_20200917_02_T1/level2_ard", + "preprocess/LT05_L1TP_181036_19880326_20200917_02_T1/level2_ard/X0109_Y0102", + "preprocess/LT05_L1TP_181036_19880326_20200917_02_T1/level2_ard/X0109_Y0102/19880326_LEVEL2_LND05_BOA.tif", + "preprocess/LT05_L1TP_181036_19880326_20200917_02_T1/level2_ard/X0109_Y0102/19880326_LEVEL2_LND05_QAI.tif", + "preprocess/LT05_L1TP_181036_19880326_20200917_02_T1/logs", + "preprocess/LT05_L1TP_181036_19880326_20200917_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19880326_20200917_02_T1/logs/level2_log/LT05_L1TP_181036_19880326_20200917_02_T1.log", + "preprocess/LT05_L1TP_181036_19880326_20200917_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19880326_20200917_02_T1/param_files/LT05_L1TP_181036_19880326_20200917_02_T1.prm", + "preprocess/LT05_L1TP_181036_19880411_20200917_02_T1", + "preprocess/LT05_L1TP_181036_19880411_20200917_02_T1/level2_ard", + "preprocess/LT05_L1TP_181036_19880411_20200917_02_T1/level2_ard/X0109_Y0102", + "preprocess/LT05_L1TP_181036_19880411_20200917_02_T1/level2_ard/X0109_Y0102/19880411_LEVEL2_LND05_BOA.tif", + "preprocess/LT05_L1TP_181036_19880411_20200917_02_T1/level2_ard/X0109_Y0102/19880411_LEVEL2_LND05_QAI.tif", + "preprocess/LT05_L1TP_181036_19880411_20200917_02_T1/logs", + "preprocess/LT05_L1TP_181036_19880411_20200917_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19880411_20200917_02_T1/logs/level2_log/LT05_L1TP_181036_19880411_20200917_02_T1.log", + "preprocess/LT05_L1TP_181036_19880411_20200917_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19880411_20200917_02_T1/param_files/LT05_L1TP_181036_19880411_20200917_02_T1.prm", + "preprocess/LT05_L1TP_181036_19880529_20200917_02_T1", + "preprocess/LT05_L1TP_181036_19880529_20200917_02_T1/level2_ard", + "preprocess/LT05_L1TP_181036_19880529_20200917_02_T1/level2_ard/X0109_Y0102", + "preprocess/LT05_L1TP_181036_19880529_20200917_02_T1/level2_ard/X0109_Y0102/19880529_LEVEL2_LND05_BOA.tif", + "preprocess/LT05_L1TP_181036_19880529_20200917_02_T1/level2_ard/X0109_Y0102/19880529_LEVEL2_LND05_QAI.tif", + "preprocess/LT05_L1TP_181036_19880529_20200917_02_T1/logs", + "preprocess/LT05_L1TP_181036_19880529_20200917_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19880529_20200917_02_T1/logs/level2_log/LT05_L1TP_181036_19880529_20200917_02_T1.log", + "preprocess/LT05_L1TP_181036_19880529_20200917_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19880529_20200917_02_T1/param_files/LT05_L1TP_181036_19880529_20200917_02_T1.prm", + "preprocess/LT05_L1TP_181036_19880614_20211118_02_T1", + "preprocess/LT05_L1TP_181036_19880614_20211118_02_T1/level2_ard", + "preprocess/LT05_L1TP_181036_19880614_20211118_02_T1/level2_ard/X0109_Y0102", + "preprocess/LT05_L1TP_181036_19880614_20211118_02_T1/level2_ard/X0109_Y0102/19880614_LEVEL2_LND05_BOA.tif", + "preprocess/LT05_L1TP_181036_19880614_20211118_02_T1/level2_ard/X0109_Y0102/19880614_LEVEL2_LND05_QAI.tif", + "preprocess/LT05_L1TP_181036_19880614_20211118_02_T1/logs", + "preprocess/LT05_L1TP_181036_19880614_20211118_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19880614_20211118_02_T1/logs/level2_log/LT05_L1TP_181036_19880614_20211118_02_T1.log", + "preprocess/LT05_L1TP_181036_19880614_20211118_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19880614_20211118_02_T1/param_files/LT05_L1TP_181036_19880614_20211118_02_T1.prm", + "preprocess/LT05_L1TP_181036_19880630_20200917_02_T1", + "preprocess/LT05_L1TP_181036_19880630_20200917_02_T1/level2_ard", + "preprocess/LT05_L1TP_181036_19880630_20200917_02_T1/level2_ard/X0109_Y0102", + "preprocess/LT05_L1TP_181036_19880630_20200917_02_T1/level2_ard/X0109_Y0102/19880630_LEVEL2_LND05_BOA.tif", + "preprocess/LT05_L1TP_181036_19880630_20200917_02_T1/level2_ard/X0109_Y0102/19880630_LEVEL2_LND05_QAI.tif", + "preprocess/LT05_L1TP_181036_19880630_20200917_02_T1/logs", + "preprocess/LT05_L1TP_181036_19880630_20200917_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19880630_20200917_02_T1/logs/level2_log/LT05_L1TP_181036_19880630_20200917_02_T1.log", + "preprocess/LT05_L1TP_181036_19880630_20200917_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19880630_20200917_02_T1/param_files/LT05_L1TP_181036_19880630_20200917_02_T1.prm", + "preprocess/LT05_L1TP_181036_19880716_20200917_02_T1", + "preprocess/LT05_L1TP_181036_19880716_20200917_02_T1/level2_ard", + "preprocess/LT05_L1TP_181036_19880716_20200917_02_T1/level2_ard/X0109_Y0102", + "preprocess/LT05_L1TP_181036_19880716_20200917_02_T1/level2_ard/X0109_Y0102/19880716_LEVEL2_LND05_BOA.tif", + "preprocess/LT05_L1TP_181036_19880716_20200917_02_T1/level2_ard/X0109_Y0102/19880716_LEVEL2_LND05_QAI.tif", + "preprocess/LT05_L1TP_181036_19880716_20200917_02_T1/logs", + "preprocess/LT05_L1TP_181036_19880716_20200917_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19880716_20200917_02_T1/logs/level2_log/LT05_L1TP_181036_19880716_20200917_02_T1.log", + "preprocess/LT05_L1TP_181036_19880716_20200917_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19880716_20200917_02_T1/param_files/LT05_L1TP_181036_19880716_20200917_02_T1.prm", + "preprocess/LT05_L1TP_181036_19880801_20200917_02_T1", + "preprocess/LT05_L1TP_181036_19880801_20200917_02_T1/level2_ard", + "preprocess/LT05_L1TP_181036_19880801_20200917_02_T1/level2_ard/X0109_Y0102", + "preprocess/LT05_L1TP_181036_19880801_20200917_02_T1/level2_ard/X0109_Y0102/19880801_LEVEL2_LND05_BOA.tif", + "preprocess/LT05_L1TP_181036_19880801_20200917_02_T1/level2_ard/X0109_Y0102/19880801_LEVEL2_LND05_QAI.tif", + "preprocess/LT05_L1TP_181036_19880801_20200917_02_T1/logs", + "preprocess/LT05_L1TP_181036_19880801_20200917_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19880801_20200917_02_T1/logs/level2_log/LT05_L1TP_181036_19880801_20200917_02_T1.log", + "preprocess/LT05_L1TP_181036_19880801_20200917_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19880801_20200917_02_T1/param_files/LT05_L1TP_181036_19880801_20200917_02_T1.prm", + "preprocess/LT05_L1TP_181036_19880902_20211118_02_T1", + "preprocess/LT05_L1TP_181036_19880902_20211118_02_T1/level2_ard", + "preprocess/LT05_L1TP_181036_19880902_20211118_02_T1/level2_ard/X0109_Y0102", + "preprocess/LT05_L1TP_181036_19880902_20211118_02_T1/level2_ard/X0109_Y0102/19880902_LEVEL2_LND05_BOA.tif", + "preprocess/LT05_L1TP_181036_19880902_20211118_02_T1/level2_ard/X0109_Y0102/19880902_LEVEL2_LND05_QAI.tif", + "preprocess/LT05_L1TP_181036_19880902_20211118_02_T1/logs", + "preprocess/LT05_L1TP_181036_19880902_20211118_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19880902_20211118_02_T1/logs/level2_log/LT05_L1TP_181036_19880902_20211118_02_T1.log", + "preprocess/LT05_L1TP_181036_19880902_20211118_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19880902_20211118_02_T1/param_files/LT05_L1TP_181036_19880902_20211118_02_T1.prm", + "preprocess/LT05_L1TP_181036_19880918_20200917_02_T1", + "preprocess/LT05_L1TP_181036_19880918_20200917_02_T1/logs", + "preprocess/LT05_L1TP_181036_19880918_20200917_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19880918_20200917_02_T1/logs/level2_log/LT05_L1TP_181036_19880918_20200917_02_T1.log", + "preprocess/LT05_L1TP_181036_19880918_20200917_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19880918_20200917_02_T1/param_files/LT05_L1TP_181036_19880918_20200917_02_T1.prm", + "preprocess/LT05_L1TP_181036_19881004_20200917_02_T1", + "preprocess/LT05_L1TP_181036_19881004_20200917_02_T1/logs", + "preprocess/LT05_L1TP_181036_19881004_20200917_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19881004_20200917_02_T1/logs/level2_log/LT05_L1TP_181036_19881004_20200917_02_T1.log", + "preprocess/LT05_L1TP_181036_19881004_20200917_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19881004_20200917_02_T1/param_files/LT05_L1TP_181036_19881004_20200917_02_T1.prm", + "preprocess/LT05_L1TP_181036_19881020_20200917_02_T1", + "preprocess/LT05_L1TP_181036_19881020_20200917_02_T1/level2_ard", + "preprocess/LT05_L1TP_181036_19881020_20200917_02_T1/level2_ard/X0109_Y0102", + "preprocess/LT05_L1TP_181036_19881020_20200917_02_T1/level2_ard/X0109_Y0102/19881020_LEVEL2_LND05_BOA.tif", + "preprocess/LT05_L1TP_181036_19881020_20200917_02_T1/level2_ard/X0109_Y0102/19881020_LEVEL2_LND05_QAI.tif", + "preprocess/LT05_L1TP_181036_19881020_20200917_02_T1/logs", + "preprocess/LT05_L1TP_181036_19881020_20200917_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19881020_20200917_02_T1/logs/level2_log/LT05_L1TP_181036_19881020_20200917_02_T1.log", + "preprocess/LT05_L1TP_181036_19881020_20200917_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19881020_20200917_02_T1/param_files/LT05_L1TP_181036_19881020_20200917_02_T1.prm", + "preprocess/LT05_L1TP_181036_19881121_20211118_02_T1", + "preprocess/LT05_L1TP_181036_19881121_20211118_02_T1/level2_ard", + "preprocess/LT05_L1TP_181036_19881121_20211118_02_T1/level2_ard/X0109_Y0102", + "preprocess/LT05_L1TP_181036_19881121_20211118_02_T1/level2_ard/X0109_Y0102/19881121_LEVEL2_LND05_BOA.tif", + "preprocess/LT05_L1TP_181036_19881121_20211118_02_T1/level2_ard/X0109_Y0102/19881121_LEVEL2_LND05_QAI.tif", + "preprocess/LT05_L1TP_181036_19881121_20211118_02_T1/logs", + "preprocess/LT05_L1TP_181036_19881121_20211118_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19881121_20211118_02_T1/logs/level2_log/LT05_L1TP_181036_19881121_20211118_02_T1.log", + "preprocess/LT05_L1TP_181036_19881121_20211118_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19881121_20211118_02_T1/param_files/LT05_L1TP_181036_19881121_20211118_02_T1.prm", + "preprocess/LT05_L1TP_181036_19881223_20211119_02_T1", + "preprocess/LT05_L1TP_181036_19881223_20211119_02_T1/logs", + "preprocess/LT05_L1TP_181036_19881223_20211119_02_T1/logs/level2_log", + "preprocess/LT05_L1TP_181036_19881223_20211119_02_T1/logs/level2_log/LT05_L1TP_181036_19881223_20211119_02_T1.log", + "preprocess/LT05_L1TP_181036_19881223_20211119_02_T1/param_files", + "preprocess/LT05_L1TP_181036_19881223_20211119_02_T1/param_files/LT05_L1TP_181036_19881223_20211119_02_T1.prm", + "trend", + "trend/mosaic", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_TSI", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_TSI/X0109_Y0102", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_TSI/X0109_Y0102/1987-1988_001-365_HL_TSA_LNDLG_NIR_TSI.tif", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_TSI/X0109_Y0102/1987-1988_001-365_HL_TSA_LNDLG_NIR_TSI.tif.aux.xml", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_TSI/mosaic", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_TSI/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_TSI.vrt", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_TSI/versions.yml", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_TSS", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_TSS/X0109_Y0102", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_TSS/X0109_Y0102/1987-1988_001-365_HL_TSA_LNDLG_NIR_TSS.tif", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_TSS/mosaic", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_TSS/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_TSS.vrt", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_TSS/versions.yml", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VBL-CAO", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VBL-CAO/X0109_Y0102", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VBL-CAO/X0109_Y0102/1987-1988_001-365_HL_TSA_LNDLG_NIR_VBL-CAO.tif", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VBL-CAO/mosaic", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VBL-CAO/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VBL-CAO.vrt", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VBL-CAO/versions.yml", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VBL-POL", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VBL-POL/X0109_Y0102", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VBL-POL/X0109_Y0102/1987-1988_001-365_HL_TSA_LNDLG_NIR_VBL-POL.tif", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VBL-POL/mosaic", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VBL-POL/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VBL-POL.vrt", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VBL-POL/versions.yml", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VBL-TRO", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VBL-TRO/X0109_Y0102", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VBL-TRO/X0109_Y0102/1987-1988_001-365_HL_TSA_LNDLG_NIR_VBL-TRO.tif", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VBL-TRO/mosaic", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VBL-TRO/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VBL-TRO.vrt", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VBL-TRO/versions.yml", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VPS-CAO", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VPS-CAO/X0109_Y0102", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VPS-CAO/X0109_Y0102/1987-1988_001-365_HL_TSA_LNDLG_NIR_VPS-CAO.tif", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VPS-CAO/mosaic", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VPS-CAO/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VPS-CAO.vrt", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VPS-CAO/versions.yml", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VPS-POL", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VPS-POL/X0109_Y0102", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VPS-POL/X0109_Y0102/1987-1988_001-365_HL_TSA_LNDLG_NIR_VPS-POL.tif", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VPS-POL/mosaic", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VPS-POL/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VPS-POL.vrt", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VPS-POL/versions.yml", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VPS-TRO", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VPS-TRO/X0109_Y0102", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VPS-TRO/X0109_Y0102/1987-1988_001-365_HL_TSA_LNDLG_NIR_VPS-TRO.tif", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VPS-TRO/mosaic", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VPS-TRO/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VPS-TRO.vrt", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VPS-TRO/versions.yml", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VSA-CAO", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VSA-CAO/X0109_Y0102", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VSA-CAO/X0109_Y0102/1987-1988_001-365_HL_TSA_LNDLG_NIR_VSA-CAO.tif", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VSA-CAO/mosaic", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VSA-CAO/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VSA-CAO.vrt", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VSA-CAO/versions.yml", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VSA-POL", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VSA-POL/X0109_Y0102", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VSA-POL/X0109_Y0102/1987-1988_001-365_HL_TSA_LNDLG_NIR_VSA-POL.tif", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VSA-POL/mosaic", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VSA-POL/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VSA-POL.vrt", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VSA-POL/versions.yml", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VSA-TRO", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VSA-TRO/X0109_Y0102", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VSA-TRO/X0109_Y0102/1987-1988_001-365_HL_TSA_LNDLG_NIR_VSA-TRO.tif", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VSA-TRO/mosaic", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VSA-TRO/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VSA-TRO.vrt", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_NIR_VSA-TRO/versions.yml", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_TSI", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_TSI/X0109_Y0102", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_TSI/X0109_Y0102/1987-1988_001-365_HL_TSA_LNDLG_RED_TSI.tif", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_TSI/X0109_Y0102/1987-1988_001-365_HL_TSA_LNDLG_RED_TSI.tif.aux.xml", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_TSI/mosaic", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_TSI/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_TSI.vrt", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_TSI/versions.yml", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_TSS", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_TSS/X0109_Y0102", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_TSS/X0109_Y0102/1987-1988_001-365_HL_TSA_LNDLG_RED_TSS.tif", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_TSS/mosaic", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_TSS/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_TSS.vrt", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_TSS/versions.yml", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VBL-CAO", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VBL-CAO/X0109_Y0102", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VBL-CAO/X0109_Y0102/1987-1988_001-365_HL_TSA_LNDLG_RED_VBL-CAO.tif", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VBL-CAO/mosaic", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VBL-CAO/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VBL-CAO.vrt", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VBL-CAO/versions.yml", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VBL-POL", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VBL-POL/X0109_Y0102", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VBL-POL/X0109_Y0102/1987-1988_001-365_HL_TSA_LNDLG_RED_VBL-POL.tif", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VBL-POL/mosaic", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VBL-POL/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VBL-POL.vrt", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VBL-POL/versions.yml", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VBL-TRO", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VBL-TRO/X0109_Y0102", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VBL-TRO/X0109_Y0102/1987-1988_001-365_HL_TSA_LNDLG_RED_VBL-TRO.tif", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VBL-TRO/mosaic", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VBL-TRO/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VBL-TRO.vrt", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VBL-TRO/versions.yml", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VPS-CAO", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VPS-CAO/X0109_Y0102", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VPS-CAO/X0109_Y0102/1987-1988_001-365_HL_TSA_LNDLG_RED_VPS-CAO.tif", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VPS-CAO/mosaic", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VPS-CAO/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VPS-CAO.vrt", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VPS-CAO/versions.yml", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VPS-POL", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VPS-POL/X0109_Y0102", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VPS-POL/X0109_Y0102/1987-1988_001-365_HL_TSA_LNDLG_RED_VPS-POL.tif", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VPS-POL/mosaic", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VPS-POL/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VPS-POL.vrt", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VPS-POL/versions.yml", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VPS-TRO", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VPS-TRO/X0109_Y0102", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VPS-TRO/X0109_Y0102/1987-1988_001-365_HL_TSA_LNDLG_RED_VPS-TRO.tif", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VPS-TRO/mosaic", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VPS-TRO/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VPS-TRO.vrt", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VPS-TRO/versions.yml", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VSA-CAO", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VSA-CAO/X0109_Y0102", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VSA-CAO/X0109_Y0102/1987-1988_001-365_HL_TSA_LNDLG_RED_VSA-CAO.tif", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VSA-CAO/mosaic", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VSA-CAO/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VSA-CAO.vrt", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VSA-CAO/versions.yml", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VSA-POL", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VSA-POL/X0109_Y0102", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VSA-POL/X0109_Y0102/1987-1988_001-365_HL_TSA_LNDLG_RED_VSA-POL.tif", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VSA-POL/mosaic", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VSA-POL/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VSA-POL.vrt", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VSA-POL/versions.yml", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VSA-TRO", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VSA-TRO/X0109_Y0102", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VSA-TRO/X0109_Y0102/1987-1988_001-365_HL_TSA_LNDLG_RED_VSA-TRO.tif", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VSA-TRO/mosaic", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VSA-TRO/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VSA-TRO.vrt", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_RED_VSA-TRO/versions.yml", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_TSI", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_TSI/X0109_Y0102", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_TSI/X0109_Y0102/1987-1988_001-365_HL_TSA_LNDLG_SMA_TSI.tif", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_TSI/X0109_Y0102/1987-1988_001-365_HL_TSA_LNDLG_SMA_TSI.tif.aux.xml", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_TSI/mosaic", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_TSI/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_TSI.vrt", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_TSI/versions.yml", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_TSS", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_TSS/X0109_Y0102", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_TSS/X0109_Y0102/1987-1988_001-365_HL_TSA_LNDLG_SMA_TSS.tif", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_TSS/mosaic", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_TSS/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_TSS.vrt", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_TSS/versions.yml", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VBL-CAO", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VBL-CAO/X0109_Y0102", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VBL-CAO/X0109_Y0102/1987-1988_001-365_HL_TSA_LNDLG_SMA_VBL-CAO.tif", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VBL-CAO/mosaic", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VBL-CAO/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VBL-CAO.vrt", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VBL-CAO/versions.yml", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VBL-POL", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VBL-POL/X0109_Y0102", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VBL-POL/X0109_Y0102/1987-1988_001-365_HL_TSA_LNDLG_SMA_VBL-POL.tif", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VBL-POL/mosaic", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VBL-POL/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VBL-POL.vrt", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VBL-POL/versions.yml", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VBL-TRO", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VBL-TRO/X0109_Y0102", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VBL-TRO/X0109_Y0102/1987-1988_001-365_HL_TSA_LNDLG_SMA_VBL-TRO.tif", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VBL-TRO/mosaic", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VBL-TRO/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VBL-TRO.vrt", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VBL-TRO/versions.yml", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VPS-CAO", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VPS-CAO/X0109_Y0102", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VPS-CAO/X0109_Y0102/1987-1988_001-365_HL_TSA_LNDLG_SMA_VPS-CAO.tif", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VPS-CAO/mosaic", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VPS-CAO/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VPS-CAO.vrt", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VPS-CAO/versions.yml", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VPS-POL", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VPS-POL/X0109_Y0102", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VPS-POL/X0109_Y0102/1987-1988_001-365_HL_TSA_LNDLG_SMA_VPS-POL.tif", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VPS-POL/mosaic", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VPS-POL/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VPS-POL.vrt", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VPS-POL/versions.yml", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VPS-TRO", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VPS-TRO/X0109_Y0102", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VPS-TRO/X0109_Y0102/1987-1988_001-365_HL_TSA_LNDLG_SMA_VPS-TRO.tif", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VPS-TRO/mosaic", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VPS-TRO/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VPS-TRO.vrt", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VPS-TRO/versions.yml", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VSA-CAO", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VSA-CAO/X0109_Y0102", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VSA-CAO/X0109_Y0102/1987-1988_001-365_HL_TSA_LNDLG_SMA_VSA-CAO.tif", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VSA-CAO/mosaic", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VSA-CAO/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VSA-CAO.vrt", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VSA-CAO/versions.yml", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VSA-POL", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VSA-POL/X0109_Y0102", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VSA-POL/X0109_Y0102/1987-1988_001-365_HL_TSA_LNDLG_SMA_VSA-POL.tif", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VSA-POL/mosaic", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VSA-POL/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VSA-POL.vrt", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VSA-POL/versions.yml", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VSA-TRO", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VSA-TRO/X0109_Y0102", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VSA-TRO/X0109_Y0102/1987-1988_001-365_HL_TSA_LNDLG_SMA_VSA-TRO.tif", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VSA-TRO/mosaic", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VSA-TRO/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VSA-TRO.vrt", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SMA_VSA-TRO/versions.yml", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_TSI", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_TSI/X0109_Y0102", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_TSI/X0109_Y0102/1987-1988_001-365_HL_TSA_LNDLG_SW2_TSI.tif", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_TSI/X0109_Y0102/1987-1988_001-365_HL_TSA_LNDLG_SW2_TSI.tif.aux.xml", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_TSI/mosaic", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_TSI/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_TSI.vrt", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_TSI/versions.yml", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_TSS", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_TSS/X0109_Y0102", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_TSS/X0109_Y0102/1987-1988_001-365_HL_TSA_LNDLG_SW2_TSS.tif", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_TSS/mosaic", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_TSS/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_TSS.vrt", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_TSS/versions.yml", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VBL-CAO", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VBL-CAO/X0109_Y0102", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VBL-CAO/X0109_Y0102/1987-1988_001-365_HL_TSA_LNDLG_SW2_VBL-CAO.tif", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VBL-CAO/mosaic", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VBL-CAO/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VBL-CAO.vrt", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VBL-CAO/versions.yml", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VBL-POL", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VBL-POL/X0109_Y0102", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VBL-POL/X0109_Y0102/1987-1988_001-365_HL_TSA_LNDLG_SW2_VBL-POL.tif", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VBL-POL/mosaic", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VBL-POL/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VBL-POL.vrt", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VBL-POL/versions.yml", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VBL-TRO", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VBL-TRO/X0109_Y0102", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VBL-TRO/X0109_Y0102/1987-1988_001-365_HL_TSA_LNDLG_SW2_VBL-TRO.tif", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VBL-TRO/mosaic", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VBL-TRO/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VBL-TRO.vrt", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VBL-TRO/versions.yml", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VPS-CAO", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VPS-CAO/X0109_Y0102", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VPS-CAO/X0109_Y0102/1987-1988_001-365_HL_TSA_LNDLG_SW2_VPS-CAO.tif", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VPS-CAO/mosaic", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VPS-CAO/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VPS-CAO.vrt", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VPS-CAO/versions.yml", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VPS-POL", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VPS-POL/X0109_Y0102", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VPS-POL/X0109_Y0102/1987-1988_001-365_HL_TSA_LNDLG_SW2_VPS-POL.tif", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VPS-POL/mosaic", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VPS-POL/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VPS-POL.vrt", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VPS-POL/versions.yml", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VPS-TRO", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VPS-TRO/X0109_Y0102", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VPS-TRO/X0109_Y0102/1987-1988_001-365_HL_TSA_LNDLG_SW2_VPS-TRO.tif", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VPS-TRO/mosaic", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VPS-TRO/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VPS-TRO.vrt", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VPS-TRO/versions.yml", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VSA-CAO", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VSA-CAO/X0109_Y0102", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VSA-CAO/X0109_Y0102/1987-1988_001-365_HL_TSA_LNDLG_SW2_VSA-CAO.tif", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VSA-CAO/mosaic", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VSA-CAO/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VSA-CAO.vrt", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VSA-CAO/versions.yml", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VSA-POL", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VSA-POL/X0109_Y0102", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VSA-POL/X0109_Y0102/1987-1988_001-365_HL_TSA_LNDLG_SW2_VSA-POL.tif", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VSA-POL/mosaic", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VSA-POL/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VSA-POL.vrt", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VSA-POL/versions.yml", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VSA-TRO", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VSA-TRO/X0109_Y0102", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VSA-TRO/X0109_Y0102/1987-1988_001-365_HL_TSA_LNDLG_SW2_VSA-TRO.tif", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VSA-TRO/mosaic", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VSA-TRO/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VSA-TRO.vrt", + "trend/mosaic/1987-1988_001-365_HL_TSA_LNDLG_SW2_VSA-TRO/versions.yml", + "trend/pyramid", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_NIR_TSI", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_NIR_TSI/trend", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_NIR_TSI/trend/X0109_Y0102", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_NIR_TSI/trend/X0109_Y0102/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_NIR_TSI.tif.ovr", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_NIR_TSS", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_NIR_TSS/trend", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_NIR_TSS/trend/X0109_Y0102", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_NIR_TSS/trend/X0109_Y0102/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_NIR_TSS.tif.ovr", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_NIR_VBL-CAO", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_NIR_VBL-CAO/trend", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_NIR_VBL-CAO/trend/X0109_Y0102", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_NIR_VBL-CAO/trend/X0109_Y0102/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_NIR_VBL-CAO.tif.ovr", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_NIR_VBL-POL", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_NIR_VBL-POL/trend", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_NIR_VBL-POL/trend/X0109_Y0102", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_NIR_VBL-POL/trend/X0109_Y0102/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_NIR_VBL-POL.tif.ovr", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_NIR_VBL-TRO", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_NIR_VBL-TRO/trend", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_NIR_VBL-TRO/trend/X0109_Y0102", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_NIR_VBL-TRO/trend/X0109_Y0102/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_NIR_VBL-TRO.tif.ovr", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_NIR_VPS-CAO", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_NIR_VPS-CAO/trend", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_NIR_VPS-CAO/trend/X0109_Y0102", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_NIR_VPS-CAO/trend/X0109_Y0102/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_NIR_VPS-CAO.tif.ovr", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_NIR_VPS-POL", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_NIR_VPS-POL/trend", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_NIR_VPS-POL/trend/X0109_Y0102", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_NIR_VPS-POL/trend/X0109_Y0102/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_NIR_VPS-POL.tif.ovr", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_NIR_VPS-TRO", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_NIR_VPS-TRO/trend", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_NIR_VPS-TRO/trend/X0109_Y0102", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_NIR_VPS-TRO/trend/X0109_Y0102/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_NIR_VPS-TRO.tif.ovr", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_NIR_VSA-CAO", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_NIR_VSA-CAO/trend", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_NIR_VSA-CAO/trend/X0109_Y0102", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_NIR_VSA-CAO/trend/X0109_Y0102/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_NIR_VSA-CAO.tif.ovr", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_NIR_VSA-POL", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_NIR_VSA-POL/trend", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_NIR_VSA-POL/trend/X0109_Y0102", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_NIR_VSA-POL/trend/X0109_Y0102/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_NIR_VSA-POL.tif.ovr", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_NIR_VSA-TRO", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_NIR_VSA-TRO/trend", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_NIR_VSA-TRO/trend/X0109_Y0102", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_NIR_VSA-TRO/trend/X0109_Y0102/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_NIR_VSA-TRO.tif.ovr", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_RED_TSI", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_RED_TSI/trend", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_RED_TSI/trend/X0109_Y0102", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_RED_TSI/trend/X0109_Y0102/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_RED_TSI.tif.ovr", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_RED_TSS", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_RED_TSS/trend", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_RED_TSS/trend/X0109_Y0102", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_RED_TSS/trend/X0109_Y0102/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_RED_TSS.tif.ovr", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_RED_VBL-CAO", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_RED_VBL-CAO/trend", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_RED_VBL-CAO/trend/X0109_Y0102", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_RED_VBL-CAO/trend/X0109_Y0102/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_RED_VBL-CAO.tif.ovr", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_RED_VBL-POL", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_RED_VBL-POL/trend", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_RED_VBL-POL/trend/X0109_Y0102", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_RED_VBL-POL/trend/X0109_Y0102/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_RED_VBL-POL.tif.ovr", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_RED_VBL-TRO", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_RED_VBL-TRO/trend", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_RED_VBL-TRO/trend/X0109_Y0102", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_RED_VBL-TRO/trend/X0109_Y0102/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_RED_VBL-TRO.tif.ovr", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_RED_VPS-CAO", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_RED_VPS-CAO/trend", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_RED_VPS-CAO/trend/X0109_Y0102", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_RED_VPS-CAO/trend/X0109_Y0102/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_RED_VPS-CAO.tif.ovr", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_RED_VPS-POL", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_RED_VPS-POL/trend", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_RED_VPS-POL/trend/X0109_Y0102", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_RED_VPS-POL/trend/X0109_Y0102/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_RED_VPS-POL.tif.ovr", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_RED_VPS-TRO", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_RED_VPS-TRO/trend", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_RED_VPS-TRO/trend/X0109_Y0102", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_RED_VPS-TRO/trend/X0109_Y0102/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_RED_VPS-TRO.tif.ovr", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_RED_VSA-CAO", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_RED_VSA-CAO/trend", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_RED_VSA-CAO/trend/X0109_Y0102", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_RED_VSA-CAO/trend/X0109_Y0102/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_RED_VSA-CAO.tif.ovr", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_RED_VSA-POL", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_RED_VSA-POL/trend", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_RED_VSA-POL/trend/X0109_Y0102", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_RED_VSA-POL/trend/X0109_Y0102/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_RED_VSA-POL.tif.ovr", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_RED_VSA-TRO", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_RED_VSA-TRO/trend", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_RED_VSA-TRO/trend/X0109_Y0102", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_RED_VSA-TRO/trend/X0109_Y0102/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_RED_VSA-TRO.tif.ovr", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SMA_TSI", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SMA_TSI/trend", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SMA_TSI/trend/X0109_Y0102", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SMA_TSI/trend/X0109_Y0102/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_SMA_TSI.tif.ovr", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SMA_TSS", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SMA_TSS/trend", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SMA_TSS/trend/X0109_Y0102", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SMA_TSS/trend/X0109_Y0102/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_SMA_TSS.tif.ovr", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SMA_VBL-CAO", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SMA_VBL-CAO/trend", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SMA_VBL-CAO/trend/X0109_Y0102", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SMA_VBL-CAO/trend/X0109_Y0102/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_SMA_VBL-CAO.tif.ovr", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SMA_VBL-POL", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SMA_VBL-POL/trend", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SMA_VBL-POL/trend/X0109_Y0102", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SMA_VBL-POL/trend/X0109_Y0102/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_SMA_VBL-POL.tif.ovr", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SMA_VBL-TRO", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SMA_VBL-TRO/trend", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SMA_VBL-TRO/trend/X0109_Y0102", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SMA_VBL-TRO/trend/X0109_Y0102/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_SMA_VBL-TRO.tif.ovr", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SMA_VPS-CAO", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SMA_VPS-CAO/trend", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SMA_VPS-CAO/trend/X0109_Y0102", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SMA_VPS-CAO/trend/X0109_Y0102/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_SMA_VPS-CAO.tif.ovr", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SMA_VPS-POL", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SMA_VPS-POL/trend", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SMA_VPS-POL/trend/X0109_Y0102", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SMA_VPS-POL/trend/X0109_Y0102/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_SMA_VPS-POL.tif.ovr", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SMA_VPS-TRO", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SMA_VPS-TRO/trend", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SMA_VPS-TRO/trend/X0109_Y0102", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SMA_VPS-TRO/trend/X0109_Y0102/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_SMA_VPS-TRO.tif.ovr", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SMA_VSA-CAO", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SMA_VSA-CAO/trend", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SMA_VSA-CAO/trend/X0109_Y0102", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SMA_VSA-CAO/trend/X0109_Y0102/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_SMA_VSA-CAO.tif.ovr", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SMA_VSA-POL", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SMA_VSA-POL/trend", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SMA_VSA-POL/trend/X0109_Y0102", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SMA_VSA-POL/trend/X0109_Y0102/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_SMA_VSA-POL.tif.ovr", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SMA_VSA-TRO", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SMA_VSA-TRO/trend", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SMA_VSA-TRO/trend/X0109_Y0102", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SMA_VSA-TRO/trend/X0109_Y0102/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_SMA_VSA-TRO.tif.ovr", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SW2_TSI", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SW2_TSI/trend", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SW2_TSI/trend/X0109_Y0102", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SW2_TSI/trend/X0109_Y0102/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_SW2_TSI.tif.ovr", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SW2_TSS", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SW2_TSS/trend", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SW2_TSS/trend/X0109_Y0102", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SW2_TSS/trend/X0109_Y0102/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_SW2_TSS.tif.ovr", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SW2_VBL-CAO", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SW2_VBL-CAO/trend", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SW2_VBL-CAO/trend/X0109_Y0102", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SW2_VBL-CAO/trend/X0109_Y0102/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_SW2_VBL-CAO.tif.ovr", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SW2_VBL-POL", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SW2_VBL-POL/trend", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SW2_VBL-POL/trend/X0109_Y0102", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SW2_VBL-POL/trend/X0109_Y0102/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_SW2_VBL-POL.tif.ovr", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SW2_VBL-TRO", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SW2_VBL-TRO/trend", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SW2_VBL-TRO/trend/X0109_Y0102", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SW2_VBL-TRO/trend/X0109_Y0102/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_SW2_VBL-TRO.tif.ovr", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SW2_VPS-CAO", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SW2_VPS-CAO/trend", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SW2_VPS-CAO/trend/X0109_Y0102", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SW2_VPS-CAO/trend/X0109_Y0102/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_SW2_VPS-CAO.tif.ovr", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SW2_VPS-POL", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SW2_VPS-POL/trend", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SW2_VPS-POL/trend/X0109_Y0102", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SW2_VPS-POL/trend/X0109_Y0102/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_SW2_VPS-POL.tif.ovr", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SW2_VPS-TRO", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SW2_VPS-TRO/trend", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SW2_VPS-TRO/trend/X0109_Y0102", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SW2_VPS-TRO/trend/X0109_Y0102/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_SW2_VPS-TRO.tif.ovr", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SW2_VSA-CAO", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SW2_VSA-CAO/trend", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SW2_VSA-CAO/trend/X0109_Y0102", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SW2_VSA-CAO/trend/X0109_Y0102/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_SW2_VSA-CAO.tif.ovr", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SW2_VSA-POL", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SW2_VSA-POL/trend", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SW2_VSA-POL/trend/X0109_Y0102", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SW2_VSA-POL/trend/X0109_Y0102/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_SW2_VSA-POL.tif.ovr", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SW2_VSA-TRO", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SW2_VSA-TRO/trend", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SW2_VSA-TRO/trend/X0109_Y0102", + "trend/pyramid/1987-1988_001-365_HL_TSA_LNDLG_SW2_VSA-TRO/trend/X0109_Y0102/X0109_Y0102_1987-1988_001-365_HL_TSA_LNDLG_SW2_VSA-TRO.tif.ovr", + "trend/pyramid/versions.yml", + "untar", + "untar/Landsat_data", + "untar/dem", + "untar/wvdb" + ] + ], + "meta": { + "nf-test": "0.9.1", + "nextflow": "24.10.0" + }, + "timestamp": "2024-11-24T15:43:30.671676472" + } +} \ No newline at end of file diff --git a/tests_large/check_test_full_results.nf.test b/tests_large/check_test_full_results.nf.test index 5ccf3e0..4a2affe 100644 --- a/tests_large/check_test_full_results.nf.test +++ b/tests_large/check_test_full_results.nf.test @@ -1,4 +1,4 @@ -// WARNING: This test requires approximately 400GB of free disk space. +// WARNING: This test requires approximately 400GB of free space. // It is excluded from default test runs due to its high resource demands. // Run with caution. @@ -14,7 +14,7 @@ nextflow_process { process "CHECK_RESULTS_FULL" config "../conf/test_full.config" - test("Checking pipeline results for: -profile test_full") { + test("Checking pipeline results for: -profile test_full | requires 400GB free space") { setup { run("NFCORE_RANGELAND") { From 72996b1c62380a33a1759b666b546ebebea4f55c Mon Sep 17 00:00:00 2001 From: Felix Kummer Date: Tue, 26 Nov 2024 14:13:41 +0100 Subject: [PATCH 34/38] Aligned run command in usage docs with other pipelines --- docs/usage.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/usage.md b/docs/usage.md index 3fb0723..e70cee4 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -366,7 +366,7 @@ Publishing of all module's outputs can be enabled or disabled using: The typical command for running the pipeline is as follows: ```bash -nextflow run nf-core/rangeland --input --dem --wvdb --data_cube --aoi --endmember --outdir -profile docker +nextflow run nf-core/rangeland -profile docker --input --dem --wvdb --data_cube --aoi --endmember --outdir ``` This will launch the pipeline with the `docker` configuration profile. See below for more information about profiles. From ba1d17f502312698f2ce0959d6eda5049f095db7 Mon Sep 17 00:00:00 2001 From: Felix Kummer Date: Tue, 26 Nov 2024 14:13:59 +0100 Subject: [PATCH 35/38] Updated nf-core workflows and modules --- modules.json | 8 ++-- modules/nf-core/untar/meta.yml | 43 ++++++++++--------- .../nf-core/utils_nextflow_pipeline/main.nf | 2 + .../tests/main.workflow.nf.test | 10 +++-- .../nf-core/utils_nfcore_pipeline/main.nf | 7 ++- .../utils_nfschema_plugin/tests/main.nf.test | 4 +- 6 files changed, 42 insertions(+), 32 deletions(-) diff --git a/modules.json b/modules.json index b2fa7c5..5281958 100644 --- a/modules.json +++ b/modules.json @@ -12,7 +12,7 @@ }, "untar": { "branch": "master", - "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] } } @@ -21,17 +21,17 @@ "nf-core": { "utils_nextflow_pipeline": { "branch": "master", - "git_sha": "3aa0aec1d52d492fe241919f0c6100ebf0074082", + "git_sha": "c2b22d85f30a706a3073387f30380704fcae013b", "installed_by": ["subworkflows"] }, "utils_nfcore_pipeline": { "branch": "master", - "git_sha": "1b6b9a3338d011367137808b49b923515080e3ba", + "git_sha": "1b89f75f1aa2021ec3360d0deccd0f6e97240551", "installed_by": ["subworkflows"] }, "utils_nfschema_plugin": { "branch": "master", - "git_sha": "bbd5a41f4535a8defafe6080e00ea74c45f4f96c", + "git_sha": "2fd2cd6d0e7b273747f32e465fdc6bcc3ae0814e", "installed_by": ["subworkflows"] } } diff --git a/modules/nf-core/untar/meta.yml b/modules/nf-core/untar/meta.yml index a9a2110..290346b 100644 --- a/modules/nf-core/untar/meta.yml +++ b/modules/nf-core/untar/meta.yml @@ -10,30 +10,33 @@ tools: Extract tar.gz files. documentation: https://www.gnu.org/software/tar/manual/ licence: ["GPL-3.0-or-later"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - archive: - type: file - description: File to be untar - pattern: "*.{tar}.{gz}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - archive: + type: file + description: File to be untar + pattern: "*.{tar}.{gz}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - untar: - type: directory - description: Directory containing contents of archive - pattern: "*/" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - $prefix: + type: directory + description: Directory containing contents of archive + pattern: "*/" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@joseespinosa" - "@drpatelh" diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf index 0fcbf7b..d6e593e 100644 --- a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf +++ b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf @@ -92,10 +92,12 @@ def checkCondaChannels() { channels = config.channels } catch (NullPointerException e) { + log.debug(e) log.warn("Could not verify conda channel configuration.") return null } catch (IOException e) { + log.debug(e) log.warn("Could not verify conda channel configuration.") return null } diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.workflow.nf.test b/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.workflow.nf.test index ca964ce..02dbf09 100644 --- a/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.workflow.nf.test +++ b/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.workflow.nf.test @@ -52,10 +52,12 @@ nextflow_workflow { } then { - assertAll( - { assert workflow.success }, - { assert workflow.stdout.contains("nextflow_workflow v9.9.9") } - ) + expect { + with(workflow) { + assert success + assert "nextflow_workflow v9.9.9" in stdout + } + } } } diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf index 5cb7baf..4cd3362 100644 --- a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf +++ b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf @@ -261,7 +261,8 @@ def attachMultiqcReport(multiqc_report) { } } } - catch (Exception all) { + catch (Exception msg) { + log.debug(msg) if (multiqc_report) { log.warn("[${workflow.manifest.name}] Could not attach MultiQC report to summary email") } @@ -358,7 +359,9 @@ new org.codehaus.groovy.GroovyException('Send plaintext e-mail, not HTML') ['sendmail', '-t'].execute() << sendmail_html log.info("-${colors.purple}[${workflow.manifest.name}]${colors.green} Sent summary e-mail to ${email_address} (sendmail)-") } - catch (Exception all) { + catch (Exception msg) { + log.debug(msg) + log.debug("Trying with mail instead of sendmail") // Catch failures and try with plaintext def mail_cmd = ['mail', '-s', subject, '--content-type=text/html', email_address] mail_cmd.execute() << email_html diff --git a/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test b/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test index 842dc43..8fb3016 100644 --- a/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test +++ b/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test @@ -42,7 +42,7 @@ nextflow_workflow { params { test_data = '' - outdir = 1 + outdir = null } workflow { @@ -94,7 +94,7 @@ nextflow_workflow { params { test_data = '' - outdir = 1 + outdir = null } workflow { From d8be4ef053991c90766c15ac3b88ed440d86dec9 Mon Sep 17 00:00:00 2001 From: Felix Kummer Date: Tue, 26 Nov 2024 15:32:45 +0100 Subject: [PATCH 36/38] Fix nf-test entry in .gitignore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Matthias Hörtenhuber --- .gitignore | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 8b0033e..23b0c7d 100644 --- a/.gitignore +++ b/.gitignore @@ -7,5 +7,4 @@ testing/ testing* *.pyc null/ -.nf-test.log -.nf-test/* +.nf-test* From 3d642274cab5550d092a5327da527e6a495076db Mon Sep 17 00:00:00 2001 From: Felix Kummer Date: Tue, 26 Nov 2024 15:43:09 +0100 Subject: [PATCH 37/38] Fixed wrong pipeline version in usage.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Matthias Hörtenhuber --- docs/usage.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/usage.md b/docs/usage.md index e70cee4..4e45c11 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -426,7 +426,7 @@ It is a good idea to specify a pipeline version when running the pipeline on you This ensures that a specific version of the pipeline code and software are used when you run your pipeline. If you keep using the same tag, you'll be running the same version of the pipeline, even if there have been changes to the code since. -First, go to the [nf-core/rangeland releases page](https://github.com/nf-core/rangeland/releases) and find the latest pipeline version - numeric only (eg. `1.3.1`). +First, go to the [nf-core/rangeland releases page](https://github.com/nf-core/rangeland/releases) and find the latest pipeline version - numeric only (eg. `1.0.0`). Then specify this when running the pipeline with `-r` (one hyphen) - eg. `-r 1.3.1`. Of course, you can switch to another version by changing the number after the `-r` flag. This version number will be logged in reports when you run the pipeline, so that you'll know what you used when you look back in the future. For example, at the bottom of the MultiQC reports. From a651b5562bc92002482b71546994b2e5d27daf53 Mon Sep 17 00:00:00 2001 From: Felix Kummer Date: Tue, 26 Nov 2024 15:57:12 +0100 Subject: [PATCH 38/38] Added concrete boolean values for parameters in usage.md --- docs/usage.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index 4e45c11..7f73f5f 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -316,7 +316,7 @@ The option is disabled by default to reduce the output size. The time series stack output can be enabled using: ```bash ---return_tss '[boolean]' +--return_tss true ``` ### Visualization @@ -331,8 +331,8 @@ Note that the mosaic visualization is required to be enabled when using the `tes The visualizations can be enabled using: ```bash ---mosaic_visualization = '[boolean]' ---pyramid_visualization = '[boolean]' +--mosaic_visualization = true +--pyramid_visualization = true ``` ### Intermediate data publishing @@ -344,8 +344,8 @@ The files for preprocessing and higher level processing can, therefore, be publi Publishing of intermediate data can be enabled using: ```bash ---save_ard = '[boolean]' ---save_tsa = '[boolean]' +--save_ard = true +--save_tsa = true ``` ### Module output publishing @@ -355,10 +355,10 @@ To disable all modules from publishing their outputs, the `--publish_dir_enabled Note that this affects _all modules_. By default all modules publish their outputs according to the other parameters. -Publishing of all module's outputs can be enabled or disabled using: +Publishing of all module's outputs can be disabled using: ```bash ---publish_dir_enabled = '[boolean]' +--publish_dir_enabled = false ``` ## Running the pipeline