diff --git a/.github/workflows/awsfulltest.yml b/.github/workflows/awsfulltest.yml index 5338217..a412c37 100644 --- a/.github/workflows/awsfulltest.yml +++ b/.github/workflows/awsfulltest.yml @@ -45,7 +45,6 @@ jobs: - name: Launch workflow via Seqera Platform uses: seqeralabs/action-tower-launch@v2 - # TODO nf-core: You can customise AWS full pipeline tests as required # Add full size test data (but still relatively small datasets for few samples) # on the `test_full.config` test runs with only one set of parameters with: diff --git a/.gitignore b/.gitignore index a42ce01..23b0c7d 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ testing/ testing* *.pyc null/ +.nf-test* diff --git a/.nf-core.yml b/.nf-core.yml index 586b308..aca765b 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -15,4 +15,5 @@ template: outdir: . skip_features: - igenomes + - fastqc version: 1.0.0 diff --git a/CHANGELOG.md b/CHANGELOG.md index 69d332e..313cdac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,9 +3,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## v1.0.0 - [date] +## v1.0.0 - [2025-01-17] -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` diff --git a/CITATIONS.md b/CITATIONS.md index 8fd66a7..db0724d 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -1,5 +1,11 @@ # nf-core/rangeland: Citations +## [FORCE on Nextflow](https://www.informatik.hu-berlin.de/de/forschung/gebiete/wbi/research/publications/2021/force_nextflow.pdf/@@download/file/force_nextflow.pdf) + +This paper describes technical details of deploying the FORCE tool in a Nextflow workflow. The workflow developed in this paper is the foundation for this nf-core pipeline. + +> Lehmann, F., Frantz, D., Becker, S., Leser, U., Hostert, P. (2021). FORCE on Nextflow: Scalable Analysis of Earth Observation Data on Commodity Clusters. In CIKM Workshops. + ## [nf-core](https://pubmed.ncbi.nlm.nih.gov/32055031/) > Ewels PA, Peltzer A, Fillinger S, Patel H, Alneberg J, Wilm A, Garcia MU, Di Tommaso P, Nahnsen S. The nf-core framework for community-curated bioinformatics pipelines. Nat Biotechnol. 2020 Mar;38(3):276-278. doi: 10.1038/s41587-020-0439-x. PubMed PMID: 32055031. @@ -10,9 +16,11 @@ ## Pipeline tools -- [FastQC](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/) +- [FORCE](https://www.mdpi.com/2072-4292/11/9/1124) + + > Frantz, D. (2019). FORCE—Landsat + Sentinel-2 Analysis Ready Data and Beyond. Remote Sensing, 11, 1124 -> Andrews, S. (2010). FastQC: A Quality Control Tool for High Throughput Sequence Data [Online].- [MultiQC](https://pubmed.ncbi.nlm.nih.gov/27312411/) +- [MultiQC](https://pubmed.ncbi.nlm.nih.gov/27312411/) > Ewels P, Magnusson M, Lundin S, Käller M. MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics. 2016 Oct 1;32(19):3047-8. doi: 10.1093/bioinformatics/btw354. Epub 2016 Jun 16. PubMed PMID: 27312411; PubMed Central PMCID: PMC5039924. diff --git a/README.md b/README.md index 07e3037..3e1db21 100644 --- a/README.md +++ b/README.md @@ -17,47 +17,41 @@ ## Introduction -**nf-core/rangeland** is a bioinformatics pipeline that ... - - - - -1. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/))2. Present QC for raw reads ([`MultiQC`](http://multiqc.info/)) +**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 (dem), endmember definition, water vapor database (wvdb), datacube definition and area of interest definition (aoi) +2. Generate allow list and analysis mask to determine which pixels from the satellite data can be used +3. Preprocess data to obtain atmospherically corrected images alongside quality assurance information (aka. level 2 analysis read data) +4. Merge spatially and temporally overlapping preprocessed data +5. Classify pixels by applying linear spectral unmixing +6. Time series analyses to obtain trends in vegetation dynamics to derive level 3 data +7. Create mosaic and pyramid visualizations of the results +8. Version reporting with MultiQC ([`MultiQC`](http://multiqc.info/)) + +

+ +

## 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. - - +To run, satellite imagery, water vapor data, a digital elevation model, endmember definitions, a datacube specification, and a area-of-interest specification are required as input data. +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: - - ```bash nextflow run nf-core/rangeland \ -profile \ - --input samplesheet.csv \ + --input \ + --dem \ + --wvdb \ + --data_cube \ + --aoi \ + --endmember \ --outdir ``` @@ -74,11 +68,34 @@ For more details about the output files and reports, please refer to the ## Credits -nf-core/rangeland was originally written by Fabian Lehmann, David Frantz, Felix Kummer. +The rangeland workflow was originally written by: + +- [Fabian Lehmann](https://github.com/Lehmann-Fabian) +- [David Frantz](https://github.com/davidfrantz) + +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). We thank the following people for their extensive assistance in the development of this pipeline: - +- [Fabian Lehmann](https://github.com/Lehmann-Fabian) +- [Katarzyna Ewa Lewinska](https://github.com/kelewinska). + +## Acknowledgements + +This pipeline was developed and aligned with nf-core as part of the [Foundations of Workflows for Large-Scale Scientific Data Analysis (FONDA)](https://fonda.hu-berlin.de/) initiative. + +[![FONDA](docs/images/fonda_logo2_cropped.png)](https://fonda.hu-berlin.de/) + +FONDA can be cited as follows: + +> **The Collaborative Research Center FONDA.** +> +> Ulf Leser, Marcus Hilbrich, Claudia Draxl, Peter Eisert, Lars Grunske, Patrick Hostert, Dagmar Kainmüller, Odej Kao, Birte Kehr, Timo Kehrer, Christoph Koch, Volker Markl, Henning Meyerhenke, Tilmann Rabl, Alexander Reinefeld, Knut Reinert, Kerstin Ritter, Björn Scheuermann, Florian Schintke, Nicole Schweikardt, Matthias Weidlich. +> +> _Datenbank Spektrum_ 2021 doi: [10.1007/s13222-021-00397-5](https://doi.org/10.1007/s13222-021-00397-5) ## Contributions and Support @@ -89,7 +106,7 @@ For further information or help, don't hesitate to get in touch on the [Slack `# ## Citations - + An extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file. @@ -100,3 +117,10 @@ You can cite the `nf-core` publication as follows: > Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen. > > _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: + +> **FORCE on Nextflow: Scalable Analysis of Earth Observation Data on Commodity Clusters** +> +> [Lehmann, F., Frantz, D., Becker, S., Leser, U., Hostert, P. (2021). FORCE on Nextflow: Scalable Analysis of Earth Observation Data on Commodity Clusters. In CIKM Workshops.](https://www.informatik.hu-berlin.de/de/forschung/gebiete/wbi/research/publications/2021/force_nextflow.pdf/@@download/file/force_nextflow.pdf) diff --git a/bin/merge_boa.r b/bin/merge_boa.r new file mode 100755 index 0000000..318164f --- /dev/null +++ b/bin/merge_boa.r @@ -0,0 +1,46 @@ +#!/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. + +require(terra) + +args <- commandArgs(trailingOnly = TRUE) + + +if (length(args) < 3) { + 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)] + +# 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 new file mode 100755 index 0000000..8515063 --- /dev/null +++ b/bin/merge_qai.r @@ -0,0 +1,41 @@ +#!/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. + +require(terra) + +args <- commandArgs(trailingOnly = TRUE) + + +if (length(args) < 3) { + 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)] + +# 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)))) diff --git a/bin/test.R b/bin/test.R new file mode 100755 index 0000000..298b023 --- /dev/null +++ b/bin/test.R @@ -0,0 +1,183 @@ +#!/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) + + +if (length(args) != 7 && length(args) != 2) { + stop("\n Error: wrong number of parameters. Usage: \n 1st arg: workflow results directory (mosaic) + \n 2nd-7th args: reference rasters (*.tif) in order: + woody cover change, woody cover year of change, + herbaceous cover change, herbaceous cover year of change, + peak change, peak year of change + \nor \n + 1st arg: workflow results directory (mosaic) \n 2nd arg: reference directory + ", call.=FALSE) +} + +# load package +require(terra) + +# function to compare change directions +compare_direction <- function(r1, r2, threshold = 0.95) { + + # get signs + s1 <- sign(r1) + s2 <- sign(r2) + + # replace na's + vals1 <- subst(s1, NA, -9999) + vals2 <- subst(s2, NA, -9999) + + # Compare the signs + matches <- vals1 == vals2 + match_count <- sum(values(matches)) + total_count <- sum(!is.na(values(vals1))) + + # Calculate the percentage of matches + match_percentage <- match_count / total_count + + if (match_percentage >= threshold) { + return(TRUE) + } else { + return(paste("Change directions not matching. Match percentage:", match_percentage)) + } +} + + +# LOAD REFERENCE +####################################################################### + +if (length(args) == 7 ){ + woody_cover_changes_ref <- rast(args[2]) + woody_cover_year_of_change_ref <- rast(args[3]) + + herbaceous_cover_changes_ref <- rast(args[4]) + herbaceous_cover_year_of_change_ref <- rast(args[5]) + + peak_changes_ref <- rast(args[6]) + peak_year_of_change_ref <- rast(args[7]) +} else { + # reference parent dir + ref_dir <- args[2] + + vrt_file <- list.files(ref_dir, pattern = "VBL-CAO\\.vrt$", recursive = TRUE, full.names = TRUE) + woody_ref <- rast(vrt_file) + woody_cover_changes_ref <- woody_ref$CHANGE + woody_cover_year_of_change_ref <- woody_ref["YEAR-OF-CHANGE"] + + vrt_file <- list.files(ref_dir, pattern = "VSA-CAO\\.vrt$", recursive = TRUE, full.names = TRUE) + herbaceous_ref <- rast(vrt_file) + herbaceous_cover_changes_ref <- herbaceous_ref$CHANGE + herbaceous_cover_year_of_change_ref <- herbaceous_ref["YEAR-OF-CHANGE"] + + vrt_file <- list.files(ref_dir, pattern = "VPS-CAO\\.vrt$", recursive = TRUE, full.names = TRUE) + peak_ref <- rast(vrt_file) + peak_changes_ref <- peak_ref$CHANGE + peak_year_of_change_ref <- peak_ref["YEAR-OF-CHANGE"] +} + +# WOODY COVER CHANGE (VALUE OF BASE LEVEL) +####################################################################### + +# input data dir +dinp <- args[1] + +fname <- dir(dinp, ".*HL_TSA_LNDLG_SMA_VBL-CAO.vrt$", full.names=TRUE) + +woody_cover_rast <- rast(fname) + +woody_cover_changes <- woody_cover_rast$CHANGE +woody_cover_year_of_change <- woody_cover_rast["YEAR-OF-CHANGE"] + + + +# HERBACEOUS COVER CHANGE (VALUE OF SEASONAL APLITUDE) +####################################################################### + + +fname <- dir(dinp, ".*HL_TSA_LNDLG_SMA_VSA-CAO.vrt$", full.names=TRUE) + +herbaceous_cover_rast <- rast(fname) + +herbaceous_cover_changes <- herbaceous_cover_rast$CHANGE +herbaceous_cover_year_of_change <- herbaceous_cover_rast["YEAR-OF-CHANGE"] + + + +# VALUE OF PEAK SEASON +####################################################################### + +fname <- dir(dinp, ".*HL_TSA_LNDLG_SMA_VPS-CAO.vrt$", full.names=TRUE) + +peak_rast <- rast(fname) + +peak_changes <- peak_rast$CHANGE +peak_year_of_change <- peak_rast["YEAR-OF-CHANGE"] + + + +# COMPARE TESTRUN WITH REFERENCE EXECUTION +####################################################################### +failure <- FALSE + +woody_cover_changes_result <- compare_direction(woody_cover_changes, woody_cover_changes_ref) +if (is.character(woody_cover_changes_result)) { + print(paste0("Error: ", woody_cover_changes_result, " for woody cover changes.")) + failure <- TRUE +} else { + print("Woody cover change check passed.") +} + +woody_cover_year_of_change_result <- all.equal(woody_cover_year_of_change, woody_cover_year_of_change_ref, tolerance=1e-3) +if (is.character(woody_cover_year_of_change_result)) { + print(paste0("Error: ", woody_cover_year_of_change_result, " for woody cover year of change.")) + failure <- TRUE +} else { + print("Woody cover year of change check passed.") +} + + +herbaceous_cover_changes_result <- compare_direction(herbaceous_cover_changes, herbaceous_cover_changes_ref) +if (is.character(herbaceous_cover_changes_result)) { + print(paste0("Error: ",herbaceous_cover_changes_result, " for herbaceous cover changes.")) + failure <- TRUE +} else { + print("Herbaceous cover change check passed.") +} + +herbaceous_cover_year_of_change_result <- all.equal(herbaceous_cover_year_of_change, herbaceous_cover_year_of_change_ref, tolerance=1e-3) +if (is.character(herbaceous_cover_year_of_change_result)) { + print(paste0("Error: ", herbaceous_cover_year_of_change_result, " for herbaceous cover year of change.")) + failure <- TRUE +} else { + print("Herbaceous cover year of change check passed.") +} + + +peak_changes_result <- compare_direction(peak_changes, peak_changes_ref) +if (is.character(peak_changes_result)) { + print(paste0("Error: ", peak_changes_result, " for peak changes.")) + failure <- TRUE +} else { + print("Peak change check passed.") +} + + +peak_year_of_change_result <- all.equal(peak_year_of_change, peak_year_of_change_ref, tolerance=1e-3) +if (is.character(peak_year_of_change_result)) { + print(paste0("Error: ", peak_year_of_change_result, " for peak year of change.")) + failure <- TRUE +} else { + print("Peak year of change check passed.") +} + +if (failure) { + stop("Some test failed.") +} else { + print("All checks passed.") +} diff --git a/conf/base.config b/conf/base.config index 8e09784..61b8112 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 } @@ -24,7 +23,6 @@ process { // These labels are used and recognised by default in DSL2 files hosted on nf-core/modules. // If possible, it would be nice to keep the same label naming convention when // adding in your local modules too. - // TODO nf-core: Customise requirements for specific processes. // See https://www.nextflow.io/docs/latest/config.html#config-process-selectors withLabel:process_single { cpus = { 1 } diff --git a/conf/modules.config b/conf/modules.config index d203d2b..6ce332a 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -13,21 +13,125 @@ 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: FASTQC { - ext.args = '--quiet' + withName: "FORCE_GENERATE_ANALYSIS_MASK" { + publishDir = [ + path: { "${params.outdir}/preparation/" }, + mode: params.publish_dir_mode, + pattern: '**.tif', + enabled: params.publish_dir_enabled + ] + } + + withName: "FORCE_GENERATE_TILE_ALLOW_LIST" { + publishDir = [ + path: { "${params.outdir}/preparation/" }, + pattern: '*.txt', + mode: params.publish_dir_mode, + enabled: params.publish_dir_enabled + ] + } + + withName: "FORCE_PREPROCESS" { + publishDir = [ + [ + path: { "${params.outdir}/preprocess/${task.tag}/logs" }, + mode: params.publish_dir_mode, + 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 }, + enabled: params.publish_dir_enabled + ] + ] + } + + + withName: "HIGHER_LEVEL_CONFIG" { + publishDir = [ + path: { "${params.outdir}/higher-level/${task.tag}/param_files" }, + mode: params.publish_dir_mode, + pattern: '*.prm', + enabled: params.publish_dir_enabled + ] + } + + withName: "FORCE_HIGHER_LEVEL" { + publishDir = [ + 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 }, + enabled: params.publish_dir_enabled + ] + } + + withName: "FORCE_PYRAMID" { + stageInMode = 'copy' + publishDir = [ + path: { "${params.outdir}/trend/pyramid/" }, + saveAs: { "${it.substring(12,it.indexOf("."))}/trend/${it.substring(0,11)}/$it" }, + pattern: '*.tif*', + mode: params.publish_dir_mode, + enabled: params.publish_dir_enabled + ] + } + + withName: "FORCE_MOSAIC" { + publishDir = [ + path: { "${params.outdir}/trend/mosaic/" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : "${params.outdir}/trend/mosaic/${task.tag}/${filename.replaceAll("trend/","")}"}, + enabled: params.publish_dir_enabled + ] + } + + withName: "CHECK_RESULTS" { + publishDir = [ + enabled: false + ] + } + + withName: "CHECK_RESULTS_FULL" { + publishDir = [ + enabled: false + ] + } + + withName: "PREPROCESS_CONFIG" { + publishDir = [ + path: { "${params.outdir}/preprocess/${task.tag}/param_files" }, + mode: params.publish_dir_mode, + pattern: '*.prm', + enabled: params.publish_dir_enabled + ] } withName: 'MULTIQC' { - ext.args = { params.multiqc_title ? "--title \"$params.multiqc_title\"" : '' } + 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 }, + enabled: params.publish_dir_enabled + ] + } + + withName: "UNTAR_*" { publishDir = [ - path: { "${params.outdir}/multiqc" }, - mode: params.publish_dir_mode, - 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/conf/test.config b/conf/test.config index 879ccb5..c874060 100644 --- a/conf/test.config +++ b/conf/test.config @@ -23,9 +23,29 @@ params { config_profile_description = 'Minimal test dataset to check pipeline function' // Input data - // TODO nf-core: Specify the paths to your test data on nf-core/test-datasets - // TODO nf-core: Give any required params for the test so that command line flags are not needed - input = params.pipelines_testdata_base_path + 'viralrecon/samplesheet/samplesheet_test_illumina_amplicon.csv' + input = 'https://github.com/nf-core/test-datasets/raw/rangeland/Landsat_collection2/Landsat_data.tar.gz' + 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' - + 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' + + // Remote sensing imagery parameters + start_date = '1987-01-01' + end_date = '1989-12-31' + + sensors_level2 = 'LND04 LND05' + + // Other parameters + group_size = 10 + + // enable mosaic visualization + mosaic_visualization = true +} + +process { + withName: "UNTAR_*" { + ext.args2 = "--strip-components=0" + } } diff --git a/conf/test_full.config b/conf/test_full.config index 024a55c..b2df818 100644 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -14,11 +14,32 @@ params { config_profile_name = 'Full test profile' config_profile_description = 'Full test dataset to check pipeline function' - // Input data for full size test - // TODO nf-core: Specify the paths to your full test data ( on nf-core/test-datasets or directly in repositories, e.g. SRA) - // TODO nf-core: Give any required params for the test so that command line flags are not needed - input = params.pipelines_testdata_base_path + 'viralrecon/samplesheet/samplesheet_full_illumina_amplicon.csv' + // Input data + input = 's3://ngi-igenomes/test-data/rangeland/landsat.tar' + dem = 's3://ngi-igenomes/test-data/rangeland/dem.tar' + wvdb = 's3://ngi-igenomes/test-data/rangeland/wvdb.tar' - // Fasta references - fasta = params.pipelines_testdata_base_path + 'viralrecon/genome/NC_045512.2/GCF_009858895.2_ASM985889v3_genomic.200409.fna.gz' + 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' + + + // Remote sensing imagery parameters + start_date = '1986-01-01' + end_date = '1989-12-31' + + sensors_level2 = 'LND04 LND05' + + // Enable time series stack output + return_tss = true + + // Enable mosaic visualization + mosaic_visualization = true +} + +process { + // This is required because of the internal structure of the input tarballs + withName: "UNTAR_*" { + ext.args2 = "--strip-components=1" + } } diff --git a/docs/images/fonda_logo2_cropped.png b/docs/images/fonda_logo2_cropped.png new file mode 100644 index 0000000..1f49ddd Binary files /dev/null and b/docs/images/fonda_logo2_cropped.png differ diff --git a/docs/images/rangeland_diagram.png b/docs/images/rangeland_diagram.png new file mode 100644 index 0000000..84374ee Binary files /dev/null and b/docs/images/rangeland_diagram.png differ diff --git a/docs/images/rangeland_diagram.svg b/docs/images/rangeland_diagram.svg new file mode 100644 index 0000000..b681a5f --- /dev/null +++ b/docs/images/rangeland_diagram.svg @@ -0,0 +1,4 @@ + + + +
GeoTIFF
Landsat/Sentinel
dem
wvdb
cube
endmember
aoi
tile_allow
analysis_mask
preprocess
merge
GeoTIFF
level 2 analysis ready data
higher_level
classification +
time series analysis
GeoTIFF
GeoTIFF
mosaic
visualization
pyramid
visualization
GeoTIFF
Level 3 data:
trends, time-series-stack
Satellite data, dem, wvdb 
Datacube, aoi
Tile allow list
Level 2 ARD
Analysis masks, datacube
Endmember
Level 3 data
Visualization
Input
Output
Legend
\ No newline at end of file diff --git a/docs/output.md b/docs/output.md index 0decc06..1c4bfed 100644 --- a/docs/output.md +++ b/docs/output.md @@ -2,31 +2,149 @@ ## Introduction -This document describes the output produced by the pipeline. Most of the plots are taken from the MultiQC report, which summarises results at the end of the pipeline. +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. - +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: -- [FastQC](#fastqc) - Raw read QC- [MultiQC](#multiqc) - Aggregate report describing results and QC from the whole pipeline +- [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. +- [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 -### FastQC +### Untar
Output files -- `fastqc/` - - `*_fastqc.html`: FastQC report containing quality metrics. - - `*_fastqc.zip`: Zip archive containing the FastQC report, tab-delimited data file and plot images. +- `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.
-[FastQC](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/) gives general quality metrics about your sequenced reads. It provides information about the quality score distribution across your reads, per base sequence content (%A/T/G/C), adapter contamination and overrepresented sequences. For further reading and documentation see the [FastQC help pages](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/).### MultiQC +[untar](https://nf-co.re/modules/untar) is a nf-core module used to extract files from tar archives. + +[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 + +
+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. + +
+ +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-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 + +
+Output files + +- `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. + - `logs/`: Logs from preprocessing. + +
+ +Preprocessing consist of two parts, generating parameter files and actual preprocessing. + +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 +The `.tif` files are only published when the `--save_ard` parameter is set to `true` to avoid bloating the storage. +::: + +### Higher-level-Processing + +
+Output files + +- `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. + +
+ +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. + +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`. + +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 + +
+Output files + +- `trend/` + - `mosaic//` + - `/`: .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. + +
+ +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
Output files @@ -38,9 +156,13 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d
-[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 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 .### Pipeline information +### Pipeline information
Output files @@ -53,4 +175,5 @@ Results generated by MultiQC collate pipeline QC from supported tools e.g. FastQ
-[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 3ee5789..c52681a 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -4,60 +4,369 @@ > _Documentation of pipeline parameters is generated automatically from the pipeline schema and can no longer be found in markdown files._ -## Introduction +## 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. + +### 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. +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: + +```tree +root +├── 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 +│ | ├── LE07_L1TP_181035_20061217_20170106_01_T1_B3.TIF +│ | ├── LE07_L1TP_181035_20061217_20170106_01_T1_B4.TIF +│ | ├── LE07_L1TP_181035_20061217_20170106_01_T1_B5.TIF +│ | ├── LE07_L1TP_181035_20061217_20170106_01_T1_B6_VCID_1.TIF +│ | ├── LE07_L1TP_181035_20061217_20170106_01_T1_B6_VCID_2.TIF +│ | ├── LE07_L1TP_181035_20061217_20170106_01_T1_B7.TIF +│ | ├── LE07_L1TP_181035_20061217_20170106_01_T1_B8.TIF +│ | ├── LE07_L1TP_181035_20061217_20170106_01_T1_BQA.TIF +│ | ├── LE07_L1TP_181035_20061217_20170106_01_T1_GCP.txt +│ | └── LE07_L1TP_181035_20061217_20170106_01_T1_MTL.txt +| └── ... +├── 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 +│ | ├── LE07_L1TP_181036_20061217_20170105_01_T1_B3.TIF +│ | ├── LE07_L1TP_181036_20061217_20170105_01_T1_B4.TIF +│ | ├── LE07_L1TP_181036_20061217_20170105_01_T1_B5.TIF +│ | ├── LE07_L1TP_181036_20061217_20170105_01_T1_B6_VCID_1.TIF +│ | ├── LE07_L1TP_181036_20061217_20170105_01_T1_B6_VCID_2.TIF +│ | ├── LE07_L1TP_181036_20061217_20170105_01_T1_B7.TIF +│ | ├── LE07_L1TP_181036_20061217_20170105_01_T1_B8.TIF +│ | ├── LE07_L1TP_181036_20061217_20170105_01_T1_BQA.TIF +│ | ├── LE07_L1TP_181036_20061217_20170105_01_T1_GCP.txt +│ | └── LE07_L1TP_181036_20061217_20170105_01_T1_MTL.txt +| └── ... +└── ... +``` + +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`: + +- "LE07" corresponds to Landsat 7 Enhanced +- "L1TP" corresponds to Level-1 Terrain Corrected imagery +- "181036" corresponds to the path and row of the imagery, this should match the subdirectory +- "20061217" identifies the 17th December 2006 as the date of acquisition +- "20170105" identifies the 5th January 2017 as the date of (re)processing +- "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: + +- "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 +- "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. + +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 +force-level1-csd -u -s "LT04,LT05,LE07" meta +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 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: + +```bash +--input '[path to imagery root]' +``` + +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) + +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 the `--dem` parameter. +Concretely, the expected structure would look like this: + +```tree +dem +├── .vrt +└── / + └── ... +``` + +Here, `.vrt` orchestrates the single digital elevation files in the `` directory. + +The DEM can be given to the pipeline using: + +```bash +--dem '[path to dem root]' +``` + +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) + +For atmospheric correction of Landsat data, information on the atmospheric water vapor content is necessary. + +The expected format for the wvdb is a directory containing daily water vapor measurements for the area of interest. + +We recommend using a precompiled water vapor database, like [this one](https://zenodo.org/record/4468701). +This global water vapor database can be downloaded by executing this code: + +```bash +wget -O wvp-global.tar.gz https://zenodo.org/record/4468701/files/wvp-global.tar.gz?download=1 +tar -xzf wvp-global.tar.gz --directory wvdb/ +rm wvp-global.tar.gz +``` + +The WVDB can be given to the pipeline using: + +```bash +--wvdb '[path to wvdb dir]' +``` + +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 + +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: + +```bash +--data_cube '[path to datacube definition file]' +``` + +### 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: + +```bash +--aoi '[path to area of interest file]' +``` - +### Endmember -## Samplesheet input +For unmixing satellite-observed reflectance into sub-pixel fractions of land surface components (e.g. photosynthetic active vegetation), endmember spectra are necessary. -You will need to create a samplesheet with information about the samples you would like to analyse before running the pipeline. Use this parameter to specify its location. It has to be a comma-separated file with 3 columns, and a header row as shown in the examples below. +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 +3670 2750 4700 0 +1700 4020 7240 0 +710 3220 5490 0 +``` + +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: + +```bash +--endmember '[path to endmember]' +``` + +## Pipeline configuration + +Users can specify additional parameters to configure how the underlying workflow tools handle the provided data. + +### 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: + +- `"LND04"`: 6-band Landsat 4 TM +- `"LND05"`: 6-band Landsat 5 TM +- `"LND07"`: 6-band Landsat 7 ETM+ +- `"LND08/09"`: 6-band Landsat 8-9 OLI +- `"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. + +The satellite identifiers can be passed as follows: + +```bash +--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. + +### Resolution + +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: + +```bash +--resolution '[integer]' +``` + +The default value is `30`, as most Landsat satellite natively provide this resolution. + +### 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'`. + +Start and end date can be passed using: + +```bash +--start_date '[YYYY-MM-DD]' +--end_date '[YYYY-MM-DD]' +``` + +### Group size + +The `--group_size` parameter can be ignored in most cases. +It defines how many satellite scenes are processed together. +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: + +```bash +--group_size '[integer]' +``` + +### 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` 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. +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: ```bash ---input '[path to samplesheet file]' +--indexes '[index-string]' ``` -### Multiple runs of the same sample +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 `sample` identifiers have to be the same when you have re-sequenced the same sample more than once e.g. to increase sequencing depth. The pipeline will concatenate the raw reads before performing any downstream analysis. Below is an example for the same sample sequenced across 3 lanes: +The time series stack output can be enabled using: -```csv title="samplesheet.csv" -sample,fastq_1,fastq_2 -CONTROL_REP1,AEG588A1_S1_L002_R1_001.fastq.gz,AEG588A1_S1_L002_R2_001.fastq.gz -CONTROL_REP1,AEG588A1_S1_L003_R1_001.fastq.gz,AEG588A1_S1_L003_R2_001.fastq.gz -CONTROL_REP1,AEG588A1_S1_L004_R1_001.fastq.gz,AEG588A1_S1_L004_R2_001.fastq.gz +```bash +--return_tss true ``` -### Full samplesheet +### Visualization -The pipeline will auto-detect whether a sample is single- or paired-end using the information provided in the samplesheet. The samplesheet can have as many columns as you desire, however, there is a strict requirement for the first 3 columns to match those defined in the table below. +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. -A final samplesheet file consisting of both single- and paired-end data may look something like the one below. This is for 6 samples, where `TREATMENT_REP3` has been sequenced twice. +The visualizations can be enabled using: -```csv title="samplesheet.csv" -sample,fastq_1,fastq_2 -CONTROL_REP1,AEG588A1_S1_L002_R1_001.fastq.gz,AEG588A1_S1_L002_R2_001.fastq.gz -CONTROL_REP2,AEG588A2_S2_L002_R1_001.fastq.gz,AEG588A2_S2_L002_R2_001.fastq.gz -CONTROL_REP3,AEG588A3_S3_L002_R1_001.fastq.gz,AEG588A3_S3_L002_R2_001.fastq.gz -TREATMENT_REP1,AEG588A4_S4_L003_R1_001.fastq.gz, -TREATMENT_REP2,AEG588A5_S5_L003_R1_001.fastq.gz, -TREATMENT_REP3,AEG588A6_S6_L003_R1_001.fastq.gz, -TREATMENT_REP3,AEG588A6_S6_L004_R1_001.fastq.gz, +```bash +--mosaic_visualization = true +--pyramid_visualization = true ``` -| Column | Description | -| --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `sample` | Custom sample name. This entry will be identical for multiple sequencing libraries/runs from the same sample. Spaces in sample names are automatically converted to underscores (`_`). | -| `fastq_1` | Full path to FastQ file for Illumina short reads 1. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | -| `fastq_2` | Full path to FastQ file for Illumina short reads 2. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | +### 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. +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. -An [example samplesheet](../assets/samplesheet.csv) has been provided with the pipeline. +Publishing of intermediate data can be enabled using: + +```bash +--save_ard = true +--save_tsa = true +``` + +### 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 disabled using: + +```bash +--publish_dir_enabled = false +``` ## Running the pipeline The typical command for running the pipeline is as follows: ```bash -nextflow run nf-core/rangeland --input ./samplesheet.csv --outdir ./results -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. @@ -76,7 +385,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: @@ -87,7 +397,12 @@ nextflow run nf-core/rangeland -profile docker -params-file params.yaml with: ```yaml title="params.yaml" -input: './samplesheet.csv' +input: '' +dem: '' +wvdb: '' +data_cube: '' +aoi: '' +endmember: '' outdir: './results/' <...> ``` @@ -96,7 +411,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 @@ -104,9 +421,12 @@ nextflow pull nf-core/rangeland ### Reproducibility -It is a good idea to specify the 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.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. @@ -122,19 +442,22 @@ To further assist in reproducibility, you can use share and reuse [parameter fil ### `-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. > [!IMPORTANT] > 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 check if your system is supported, 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 environment. +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 @@ -152,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 pipeline steps, 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 resources request (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 the container or conda environment used by a pipeline steps 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 the container or conda environment used by a pipeline steps 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. @@ -196,9 +534,11 @@ If you have any questions or issues please send us a message on [Slack](https:// ## 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). diff --git a/main.nf b/main.nf index 3650120..69bb9ce 100644 --- a/main.nf +++ b/main.nf @@ -29,18 +29,18 @@ include { PIPELINE_COMPLETION } from './subworkflows/local/utils_nfcore_rang // workflow NFCORE_RANGELAND { - take: - samplesheet // channel: samplesheet read in from --input - main: // // WORKFLOW: Run pipeline // - RANGELAND ( - samplesheet - ) + 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 } /* @@ -67,9 +67,8 @@ workflow { // // WORKFLOW: Run main workflow // - NFCORE_RANGELAND ( - PIPELINE_INITIALISATION.out.samplesheet - ) + NFCORE_RANGELAND () + // // SUBWORKFLOW: Run completion tasks // diff --git a/modules.json b/modules.json index 01a54c4..f794519 100644 --- a/modules.json +++ b/modules.json @@ -5,14 +5,14 @@ "https://github.com/nf-core/modules.git": { "modules": { "nf-core": { - "fastqc": { + "multiqc": { "branch": "master", - "git_sha": "dc94b6ee04a05ddb9f7ae050712ff30a13149164", + "git_sha": "cf17ca47590cc578dfb47db1c2a44ef86f89976d", "installed_by": ["modules"] }, - "multiqc": { + "untar": { "branch": "master", - "git_sha": "cf17ca47590cc578dfb47db1c2a44ef86f89976d", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] } } diff --git a/modules/local/check_results/main.nf b/modules/local/check_results/main.nf new file mode 100644 index 0000000..def8337 --- /dev/null +++ b/modules/local/check_results/main.nf @@ -0,0 +1,39 @@ +process CHECK_RESULTS { + tag 'check' + label 'process_low' + + container 'docker.io/rocker/geospatial:4.3.1' + + input: + path{ "trend/?/*" } + path woody_change_ref + path woody_yoc_ref + path herbaceous_change_ref + path herbaceous_yoc_ref + path peak_change_ref + path peak_yoc_ref + + output: + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + """ + files=`find ./trend/ -maxdepth 1 -mindepth 1 -type d` + for path in \$files; do + mkdir -p trend/\$(ls \$path) + cp \$path/*/* trend/\$(ls \$path)/ + rm \$path -r + done; + test.R trend/mosaic $woody_change_ref $woody_yoc_ref $herbaceous_change_ref $herbaceous_yoc_ref $peak_change_ref $peak_yoc_ref + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + r-base: \$(echo \$(R --version 2>&1) | sed 's/^.*R version //; s/ .*\$//') + terra: \$(Rscript -e "library(terra); cat(as.character(packageVersion('terra')))") + END_VERSIONS + """ + +} diff --git a/modules/local/check_results_full/main.nf b/modules/local/check_results_full/main.nf new file mode 100644 index 0000000..f1f094b --- /dev/null +++ b/modules/local/check_results_full/main.nf @@ -0,0 +1,34 @@ +process CHECK_RESULTS_FULL { + tag 'check' + label 'process_low' + + container 'docker.io/rocker/geospatial:4.3.1' + + input: + path{ "trend/?/*" } + path reference + + output: + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + """ + files=`find ./trend/ -maxdepth 1 -mindepth 1 -type d` + for path in \$files; do + mkdir -p trend/\$(ls \$path) + cp \$path/*/* trend/\$(ls \$path)/ + rm \$path -r + done; + test.R trend/mosaic $reference + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + r-base: \$(echo \$(R --version 2>&1) | sed 's/^.*R version //; s/ .*\$//') + terra: \$(Rscript -e "library(terra); cat(as.character(packageVersion('terra')))") + END_VERSIONS + """ + +} diff --git a/modules/local/force-generate_analysis_mask/main.nf b/modules/local/force-generate_analysis_mask/main.nf new file mode 100644 index 0000000..fdaa5a9 --- /dev/null +++ b/modules/local/force-generate_analysis_mask/main.nf @@ -0,0 +1,30 @@ +process FORCE_GENERATE_ANALYSIS_MASK{ + tag { aoi.simpleName } + label 'process_single' + + container "docker.io/davidfrantz/force:3.7.10" + + input: + path aoi + path 'mask/datacube-definition.prj' + val resolution + + output: + //Mask for whole region + path 'mask/*/*.tif', emit: masks + path "versions.yml", emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + """ + force-cube -o mask/ -s $resolution $aoi + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + force: \$(force -v | sed 's/.*: //') + END_VERSIONS + """ + +} diff --git a/modules/local/force-generate_tile_allow_list/main.nf b/modules/local/force-generate_tile_allow_list/main.nf new file mode 100644 index 0000000..6125e47 --- /dev/null +++ b/modules/local/force-generate_tile_allow_list/main.nf @@ -0,0 +1,30 @@ +process FORCE_GENERATE_TILE_ALLOW_LIST{ + tag { aoi.simpleName } + label 'process_single' + + container "docker.io/davidfrantz/force:3.7.10" + + input: + path aoi + path 'tmp/datacube-definition.prj' + + output: + //Tile allow for this image + path 'tile_allow.txt', emit: tile_allow + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + """ + force-tile-extent $aoi tmp/ tile_allow.txt + rm -r tmp + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + force: \$(force -v | sed 's/.*: //') + END_VERSIONS + """ + +} diff --git a/modules/local/force-higher_level/main.nf b/modules/local/force-higher_level/main.nf new file mode 100644 index 0000000..c042cb1 --- /dev/null +++ b/modules/local/force-higher_level/main.nf @@ -0,0 +1,42 @@ +process FORCE_HIGHER_LEVEL { + tag { tile } + label 'process_medium' + label 'error_retry' + + container "docker.io/davidfrantz/force:3.7.10" + + input: + tuple val(tile), path(config), path(ard), path(aoi), path (datacube), path (endmember) + + output: + path 'trend/*.tif*', optional:true, emit: trend_files + path "versions.yml", emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + """ + PARAM=$config + + mkdir trend + + # set provenance directory + 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 + results=`find trend -name '*.tif*'` + parallel -j $task.cpus 'mv {} {//}_{/}' ::: \$results + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + force: \$(force -v | sed 's/.*: //') + END_VERSIONS + """ + +} + diff --git a/modules/local/force-mosaic/main.nf b/modules/local/force-mosaic/main.nf new file mode 100644 index 0000000..a114805 --- /dev/null +++ b/modules/local/force-mosaic/main.nf @@ -0,0 +1,40 @@ +process FORCE_MOSAIC{ + tag { product } + label 'process_low' + + container "docker.io/davidfrantz/force:3.7.10" + + input: + tuple val(product), path('trend/*') + path 'trend/datacube-definition.prj' + + output: + tuple val(product), path('trend/*'), emit: trend_files + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + """ + move_file() { + path=\$1 + mkdir -p \${path%_$product*} + mv \$path \${path%_$product*}/${product}.\${path#*.} + } + 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 + "${task.process}": + force: \$(force -v | sed 's/.*: //') + END_VERSIONS + """ + +} diff --git a/modules/local/force-preprocess/main.nf b/modules/local/force-preprocess/main.nf new file mode 100644 index 0000000..e694b6c --- /dev/null +++ b/modules/local/force-preprocess/main.nf @@ -0,0 +1,48 @@ +process FORCE_PREPROCESS { + tag { data.simpleName } + label 'process_medium' + label 'error_retry' + + container "docker.io/davidfrantz/force:3.7.10" + + input: + tuple path(conf), path(data), path(cube), path(tile), path(dem), path(wvdb) + + output: + path "**/*BOA.tif", optional:true, emit: boa_tiles + path "**/*QAI.tif", optional:true, emit: qai_tiles + path "**.log" , emit: log + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + """ + PARAM=$conf + + # make directories for force output + mkdir level2_ard + mkdir level2_log + mkdir level2_tmp + mkdir level2_prov + + + # set output directories in parameter file + sed -i "/^DIR_LEVEL2 /c\\DIR_LEVEL2 = level2_ard/" \$PARAM + sed -i "/^DIR_LOG /c\\DIR_LOG = level2_log/" \$PARAM + sed -i "/^DIR_TEMP /c\\DIR_TEMP = level2_tmp/" \$PARAM + sed -i "/^DIR_PROVENANCE /c\\DIR_PROVENANCE = level2_prov/" \$PARAM + + FILEPATH=$data + BASE=\$(basename $data) + force-l2ps \$FILEPATH \$PARAM > level2_log/\$BASE.log + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + force: \$(force -v | sed 's/.*: //') + END_VERSIONS + """ + + +} diff --git a/modules/local/force-pyramid/main.nf b/modules/local/force-pyramid/main.nf new file mode 100644 index 0000000..34bac8b --- /dev/null +++ b/modules/local/force-pyramid/main.nf @@ -0,0 +1,28 @@ +process FORCE_PYRAMID { + tag { tile } + label 'process_low' + + container "docker.io/davidfrantz/force:3.7.10" + + input: + tuple val(tile), path(image) + + output: + path('**') , emit: trends + path "versions.yml", emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + """ + file="*.tif" + force-pyramid \$file + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + force: \$(force -v | sed 's/.*: //') + END_VERSIONS + """ + +} diff --git a/modules/local/higher_level_force_config/main.nf b/modules/local/higher_level_force_config/main.nf new file mode 100644 index 0000000..dbcc9fe --- /dev/null +++ b/modules/local/higher_level_force_config/main.nf @@ -0,0 +1,81 @@ +process HIGHER_LEVEL_CONFIG { + tag { tile } + label 'process_single' + label 'error_retry' + + container "docker.io/davidfrantz/force:3.7.10" + + input: + 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 + path "versions.yml", emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + """ + # generate parameterfile from scratch + force-parameter -c ./trend_${tile}.prm TSA + PARAM=trend_"$tile".prm + + # set parameters + + # 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 + + # replace Tile to process + TILE="$tile" + X=\${TILE:1:4} + Y=\${TILE:7:11} + sed -i "/^X_TILE_RANGE /c\\X_TILE_RANGE = \$X \$X" \$PARAM + sed -i "/^Y_TILE_RANGE /c\\Y_TILE_RANGE = \$Y \$Y" \$PARAM + + # resolution + sed -i "/^RESOLUTION /c\\RESOLUTION = $resolution" \$PARAM + + + # sensors + sed -i "/^SENSORS /c\\SENSORS = $sensors_level2" \$PARAM + + + # date range + sed -i "/^DATE_RANGE /c\\DATE_RANGE = $start_date $end_date" \$PARAM + + + # spectral index + 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 + sed -i "/^OUTPUT_TSI /c\\OUTPUT_TSI = TRUE" \$PARAM + + # polar metrics + sed -i "/^POL /c\\POL = VPS VBL VSA" \$PARAM + sed -i "/^OUTPUT_POL /c\\OUTPUT_POL = TRUE" \$PARAM + sed -i "/^OUTPUT_TRO /c\\OUTPUT_TRO = TRUE" \$PARAM + sed -i "/^OUTPUT_CAO /c\\OUTPUT_CAO = TRUE" \$PARAM + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + force: \$(force -v | sed 's/.*: //') + END_VERSIONS + """ + +} + diff --git a/modules/local/merge/main.nf b/modules/local/merge/main.nf new file mode 100644 index 0000000..f849269 --- /dev/null +++ b/modules/local/merge/main.nf @@ -0,0 +1,58 @@ +process MERGE { + tag { id } + label 'process_low' + label 'error_retry' + + container "docker.io/davidfrantz/force:3.7.10" + + input: + val (data_type) // defines whether qai or boa is merged + tuple val(id), path('input/?/*') + path cube + + output: + tuple val(id), path("*.tif"), emit: tiles_merged + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + """ + # get files to merge + files=`find -L input/ -type f -printf "%f\\n" | sort | uniq` + numberFiles=`echo \$files | wc -w` + + # merge function + merge() { + file=\$1 + echo "Merging \$file (\$2 of \$numberFiles)" + + onefile=`ls -- */*/\${file} | head -1` + 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 + merge_qai.r \$file \${matchingFiles} + fi + + #apply meta + force-mdcp \$onefile \$file + } + export -f merge + export numberFiles + + # start merging in parallel + parallel -j $task.cpus merge {} {#} ::: \$files + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + force: \$(force -v | sed 's/.*: //') + r-base: \$(echo \$(R --version 2>&1) | sed 's/^.*R version //; s/ .*\$//') + raster: \$(Rscript -e "library(raster); cat(as.character(packageVersion('raster')))") + END_VERSIONS + """ + +} diff --git a/modules/local/preprocess_force_config/main.nf b/modules/local/preprocess_force_config/main.nf new file mode 100644 index 0000000..ff30e9c --- /dev/null +++ b/modules/local/preprocess_force_config/main.nf @@ -0,0 +1,57 @@ +process PREPROCESS_CONFIG { + tag { data.simpleName } + label 'process_single' + label 'error_retry' + + container "docker.io/davidfrantz/force:3.7.10" + + input: + path data + path cube + path tile + path dem + path wvdb + + output: + tuple path("*.prm"), path(data), path(cube), path(tile), path(dem), path(wvdb), emit: preprocess_config_and_data + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + """ + BASE=\$(basename $data) + + # generate parameterfile from scratch + force-parameter -c ./preprocess_${tile}.prm LEVEL2 + PARAM=\$BASE.prm + mv *.prm \$PARAM + + # read grid definition + CRS=\$(sed '1q;d' $cube) + ORIGINX=\$(sed '2q;d' $cube) + ORIGINY=\$(sed '3q;d' $cube) + TILESIZE=\$(sed '6q;d' $cube) + BLOCKSIZE=\$(sed '7q;d' $cube) + + # get dem vrt file + dem_file=\$(find $dem/ -type f -name "*.vrt" -print | head -n 1) + + # set parameters + sed -i "/^FILE_DEM /c\\FILE_DEM = \$dem_file" \$PARAM + sed -i "/^DIR_WVPLUT /c\\DIR_WVPLUT = $wvdb" \$PARAM + sed -i "/^FILE_TILE /c\\FILE_TILE = $tile" \$PARAM + sed -i "/^TILE_SIZE /c\\TILE_SIZE = \$TILESIZE" \$PARAM + sed -i "/^BLOCK_SIZE /c\\BLOCK_SIZE = \$BLOCKSIZE" \$PARAM + 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 + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + force: \$(force -v | sed 's/.*: //') + END_VERSIONS + """ + +} diff --git a/modules/nf-core/fastqc/environment.yml b/modules/nf-core/fastqc/environment.yml deleted file mode 100644 index 691d4c7..0000000 --- a/modules/nf-core/fastqc/environment.yml +++ /dev/null @@ -1,5 +0,0 @@ -channels: - - conda-forge - - bioconda -dependencies: - - bioconda::fastqc=0.12.1 diff --git a/modules/nf-core/fastqc/main.nf b/modules/nf-core/fastqc/main.nf deleted file mode 100644 index 752c3a1..0000000 --- a/modules/nf-core/fastqc/main.nf +++ /dev/null @@ -1,64 +0,0 @@ -process FASTQC { - tag "$meta.id" - label 'process_medium' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/fastqc:0.12.1--hdfd78af_0' : - 'biocontainers/fastqc:0.12.1--hdfd78af_0' }" - - input: - tuple val(meta), path(reads) - - output: - tuple val(meta), path("*.html"), emit: html - tuple val(meta), path("*.zip") , emit: zip - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - // Make list of old name and new name pairs to use for renaming in the bash while loop - def old_new_pairs = reads instanceof Path || reads.size() == 1 ? [[ reads, "${prefix}.${reads.extension}" ]] : reads.withIndex().collect { entry, index -> [ entry, "${prefix}_${index + 1}.${entry.extension}" ] } - def rename_to = old_new_pairs*.join(' ').join(' ') - def renamed_files = old_new_pairs.collect{ _old_name, new_name -> new_name }.join(' ') - - // The total amount of allocated RAM by FastQC is equal to the number of threads defined (--threads) time the amount of RAM defined (--memory) - // https://github.com/s-andrews/FastQC/blob/1faeea0412093224d7f6a07f777fad60a5650795/fastqc#L211-L222 - // Dividing the task.memory by task.cpu allows to stick to requested amount of RAM in the label - def memory_in_mb = MemoryUnit.of("${task.memory}").toUnit('MB') / task.cpus - // FastQC memory value allowed range (100 - 10000) - def fastqc_memory = memory_in_mb > 10000 ? 10000 : (memory_in_mb < 100 ? 100 : memory_in_mb) - - """ - printf "%s %s\\n" $rename_to | while read old_name new_name; do - [ -f "\${new_name}" ] || ln -s \$old_name \$new_name - done - - fastqc \\ - $args \\ - --threads $task.cpus \\ - --memory $fastqc_memory \\ - $renamed_files - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - fastqc: \$( fastqc --version | sed '/FastQC v/!d; s/.*v//' ) - END_VERSIONS - """ - - stub: - def prefix = task.ext.prefix ?: "${meta.id}" - """ - touch ${prefix}.html - touch ${prefix}.zip - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - fastqc: \$( fastqc --version | sed '/FastQC v/!d; s/.*v//' ) - END_VERSIONS - """ -} diff --git a/modules/nf-core/fastqc/meta.yml b/modules/nf-core/fastqc/meta.yml deleted file mode 100644 index 2b2e62b..0000000 --- a/modules/nf-core/fastqc/meta.yml +++ /dev/null @@ -1,67 +0,0 @@ -name: fastqc -description: Run FastQC on sequenced reads -keywords: - - quality control - - qc - - adapters - - fastq -tools: - - fastqc: - description: | - FastQC gives general quality metrics about your reads. - It provides information about the quality score distribution - across your reads, the per base sequence content (%A/C/G/T). - - You get information about adapter contamination and other - overrepresented sequences. - homepage: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/ - documentation: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/ - licence: ["GPL-2.0-only"] - identifier: biotools:fastqc -input: - - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - reads: - type: file - description: | - List of input FastQ files of size 1 and 2 for single-end and paired-end data, - respectively. -output: - - html: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - "*.html": - type: file - description: FastQC report - pattern: "*_{fastqc.html}" - - zip: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - "*.zip": - type: file - description: FastQC report archive - pattern: "*_{fastqc.zip}" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@drpatelh" - - "@grst" - - "@ewels" - - "@FelixKrueger" -maintainers: - - "@drpatelh" - - "@grst" - - "@ewels" - - "@FelixKrueger" diff --git a/modules/nf-core/fastqc/tests/main.nf.test b/modules/nf-core/fastqc/tests/main.nf.test deleted file mode 100644 index e9d79a0..0000000 --- a/modules/nf-core/fastqc/tests/main.nf.test +++ /dev/null @@ -1,309 +0,0 @@ -nextflow_process { - - name "Test Process FASTQC" - script "../main.nf" - process "FASTQC" - - tag "modules" - tag "modules_nfcore" - tag "fastqc" - - test("sarscov2 single-end [fastq]") { - - when { - process { - """ - input[0] = Channel.of([ - [ id: 'test', single_end:true ], - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] - ]) - """ - } - } - - then { - assertAll ( - { assert process.success }, - // NOTE The report contains the date inside it, which means that the md5sum is stable per day, but not longer than that. So you can't md5sum it. - // looks like this:
Mon 2 Oct 2023
test.gz
- // https://github.com/nf-core/modules/pull/3903#issuecomment-1743620039 - { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, - { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, - { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, - { assert snapshot(process.out.versions).match() } - ) - } - } - - test("sarscov2 paired-end [fastq]") { - - when { - process { - """ - input[0] = Channel.of([ - [id: 'test', single_end: false], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] - ]) - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" }, - { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" }, - { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" }, - { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" }, - { assert path(process.out.html[0][1][0]).text.contains("File typeConventional base calls") }, - { assert path(process.out.html[0][1][1]).text.contains("File typeConventional base calls") }, - { assert snapshot(process.out.versions).match() } - ) - } - } - - test("sarscov2 interleaved [fastq]") { - - when { - process { - """ - input[0] = Channel.of([ - [id: 'test', single_end: false], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_interleaved.fastq.gz', checkIfExists: true) - ]) - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, - { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, - { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, - { assert snapshot(process.out.versions).match() } - ) - } - } - - test("sarscov2 paired-end [bam]") { - - when { - process { - """ - input[0] = Channel.of([ - [id: 'test', single_end: false], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) - ]) - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, - { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, - { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, - { assert snapshot(process.out.versions).match() } - ) - } - } - - test("sarscov2 multiple [fastq]") { - - when { - process { - """ - input[0] = Channel.of([ - [id: 'test', single_end: false], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_2.fastq.gz', checkIfExists: true) ] - ]) - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" }, - { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" }, - { assert process.out.html[0][1][2] ==~ ".*/test_3_fastqc.html" }, - { assert process.out.html[0][1][3] ==~ ".*/test_4_fastqc.html" }, - { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" }, - { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" }, - { assert process.out.zip[0][1][2] ==~ ".*/test_3_fastqc.zip" }, - { assert process.out.zip[0][1][3] ==~ ".*/test_4_fastqc.zip" }, - { assert path(process.out.html[0][1][0]).text.contains("File typeConventional base calls") }, - { assert path(process.out.html[0][1][1]).text.contains("File typeConventional base calls") }, - { assert path(process.out.html[0][1][2]).text.contains("File typeConventional base calls") }, - { assert path(process.out.html[0][1][3]).text.contains("File typeConventional base calls") }, - { assert snapshot(process.out.versions).match() } - ) - } - } - - test("sarscov2 custom_prefix") { - - when { - process { - """ - input[0] = Channel.of([ - [ id:'mysample', single_end:true ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) - ]) - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert process.out.html[0][1] ==~ ".*/mysample_fastqc.html" }, - { assert process.out.zip[0][1] ==~ ".*/mysample_fastqc.zip" }, - { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, - { assert snapshot(process.out.versions).match() } - ) - } - } - - test("sarscov2 single-end [fastq] - stub") { - - options "-stub" - when { - process { - """ - input[0] = Channel.of([ - [ id: 'test', single_end:true ], - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] - ]) - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - - test("sarscov2 paired-end [fastq] - stub") { - - options "-stub" - when { - process { - """ - input[0] = Channel.of([ - [id: 'test', single_end: false], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] - ]) - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - - test("sarscov2 interleaved [fastq] - stub") { - - options "-stub" - when { - process { - """ - input[0] = Channel.of([ - [id: 'test', single_end: false], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_interleaved.fastq.gz', checkIfExists: true) - ]) - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - - test("sarscov2 paired-end [bam] - stub") { - - options "-stub" - when { - process { - """ - input[0] = Channel.of([ - [id: 'test', single_end: false], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) - ]) - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - - test("sarscov2 multiple [fastq] - stub") { - - options "-stub" - when { - process { - """ - input[0] = Channel.of([ - [id: 'test', single_end: false], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_2.fastq.gz', checkIfExists: true) ] - ]) - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - - test("sarscov2 custom_prefix - stub") { - - options "-stub" - when { - process { - """ - input[0] = Channel.of([ - [ id:'mysample', single_end:true ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) - ]) - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } -} diff --git a/modules/nf-core/fastqc/tests/main.nf.test.snap b/modules/nf-core/fastqc/tests/main.nf.test.snap deleted file mode 100644 index d5db309..0000000 --- a/modules/nf-core/fastqc/tests/main.nf.test.snap +++ /dev/null @@ -1,392 +0,0 @@ -{ - "sarscov2 custom_prefix": { - "content": [ - [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T11:02:16.374038" - }, - "sarscov2 single-end [fastq] - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": true - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": true - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ], - "html": [ - [ - { - "id": "test", - "single_end": true - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ], - "zip": [ - [ - { - "id": "test", - "single_end": true - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T11:02:24.993809" - }, - "sarscov2 custom_prefix - stub": { - "content": [ - { - "0": [ - [ - { - "id": "mysample", - "single_end": true - }, - "mysample.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - [ - { - "id": "mysample", - "single_end": true - }, - "mysample.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ], - "html": [ - [ - { - "id": "mysample", - "single_end": true - }, - "mysample.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ], - "zip": [ - [ - { - "id": "mysample", - "single_end": true - }, - "mysample.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T11:03:10.93942" - }, - "sarscov2 interleaved [fastq]": { - "content": [ - [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T11:01:42.355718" - }, - "sarscov2 paired-end [bam]": { - "content": [ - [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T11:01:53.276274" - }, - "sarscov2 multiple [fastq]": { - "content": [ - [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T11:02:05.527626" - }, - "sarscov2 paired-end [fastq]": { - "content": [ - [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T11:01:31.188871" - }, - "sarscov2 paired-end [fastq] - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ], - "html": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ], - "zip": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T11:02:34.273566" - }, - "sarscov2 multiple [fastq] - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ], - "html": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ], - "zip": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T11:03:02.304411" - }, - "sarscov2 single-end [fastq]": { - "content": [ - [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T11:01:19.095607" - }, - "sarscov2 interleaved [fastq] - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ], - "html": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ], - "zip": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T11:02:44.640184" - }, - "sarscov2 paired-end [bam] - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ], - "html": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ], - "zip": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T11:02:53.550742" - } -} \ No newline at end of file diff --git a/modules/nf-core/fastqc/tests/tags.yml b/modules/nf-core/fastqc/tests/tags.yml deleted file mode 100644 index 7834294..0000000 --- a/modules/nf-core/fastqc/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -fastqc: - - modules/nf-core/fastqc/** 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 new file mode 100644 index 0000000..9bd8f55 --- /dev/null +++ b/modules/nf-core/untar/main.nf @@ -0,0 +1,84 @@ +process UNTAR { + tag "$archive" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/ubuntu:22.04' : + 'nf-core/ubuntu:22.04' }" + + input: + tuple val(meta), path(archive) + + output: + tuple val(meta), path("$prefix"), emit: untar + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def args2 = task.ext.args2 ?: '' + prefix = task.ext.prefix ?: ( meta.id ? "${meta.id}" : archive.baseName.toString().replaceFirst(/\.tar$/, "")) + + """ + mkdir $prefix + + ## Ensures --strip-components only applied when top level of tar contents is a directory + ## If just files or multiple directories, place all in prefix + if [[ \$(tar -taf ${archive} | grep -o -P "^.*?\\/" | uniq | wc -l) -eq 1 ]]; then + tar \\ + -C $prefix --strip-components 1 \\ + -xavf \\ + $args \\ + $archive \\ + $args2 + else + tar \\ + -C $prefix \\ + -xavf \\ + $args \\ + $archive \\ + $args2 + fi + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + untar: \$(echo \$(tar --version 2>&1) | sed 's/^.*(GNU tar) //; s/ Copyright.*\$//') + END_VERSIONS + """ + + stub: + prefix = task.ext.prefix ?: ( meta.id ? "${meta.id}" : archive.toString().replaceFirst(/\.[^\.]+(.gz)?$/, "")) + """ + 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}": + untar: \$(echo \$(tar --version 2>&1) | sed 's/^.*(GNU tar) //; s/ Copyright.*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/untar/meta.yml b/modules/nf-core/untar/meta.yml new file mode 100644 index 0000000..290346b --- /dev/null +++ b/modules/nf-core/untar/meta.yml @@ -0,0 +1,49 @@ +name: untar +description: Extract files. +keywords: + - untar + - uncompress + - extract +tools: + - untar: + description: | + 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}" +output: + - untar: + - 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: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@joseespinosa" + - "@drpatelh" + - "@matthdsm" + - "@jfy133" +maintainers: + - "@joseespinosa" + - "@drpatelh" + - "@matthdsm" + - "@jfy133" 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/** diff --git a/nextflow.config b/nextflow.config index bdfa082..3f7ff40 100644 --- a/nextflow.config +++ b/nextflow.config @@ -9,15 +9,39 @@ // Global default params, used in configs params { - // TODO nf-core: Specify your pipeline's command line flags // Input options - input = null + input = null + dem = null + wvdb = null + data_cube = null + aoi = null + endmember = null + + // Remote sensing imagery parameters + sensors_level2 = "LND04 LND05 LND07" + resolution = 30 + start_date = "1984-01-01" + end_date = "2006-12-31" + + // Workflow configuration + 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" + return_tss = false + + // Visualization + mosaic_visualization = true + pyramid_visualization = true // MultiQC options - multiqc_config = null - multiqc_title = null - multiqc_logo = null - max_multiqc_email_size = '25.MB' + multiqc_config = null + multiqc_title = null + multiqc_logo = null + max_multiqc_email_size = '25.MB' multiqc_methods_description = null // Boilerplate options @@ -77,14 +101,15 @@ profiles { apptainer.enabled = false } docker { - docker.enabled = true - conda.enabled = false - singularity.enabled = false - podman.enabled = false - shifter.enabled = false - charliecloud.enabled = false - apptainer.enabled = false - docker.runOptions = '-u $(id -u):$(id -g)' + docker.enabled = true + conda.enabled = false + singularity.enabled = false + podman.enabled = false + shifter.enabled = false + charliecloud.enabled = false + apptainer.enabled = false + docker.fixOwnership = true + docker.runOptions = '-u $(id -u):$(id -g)' } arm { docker.runOptions = '-u $(id -u):$(id -g) --platform=linux/amd64' @@ -163,8 +188,8 @@ 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 -// includeConfig !System.getenv('NXF_OFFLINE') && params.custom_config_base ? "${params.custom_config_base}/pipeline/rangeland.config" : "/dev/null" +// 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 // Will not be used unless Apptainer / Docker / Podman / Charliecloud / Singularity are enabled @@ -222,30 +247,29 @@ manifest { name = 'nf-core/rangeland' author = """Fabian Lehmann, David Frantz, Felix Kummer""" // The author field is deprecated from Nextflow version 24.10.0, use contributors instead contributors = [ - // TODO nf-core: Update the field with the details of the contributors to your pipeline. New with Nextflow version 24.10.0 [ name: 'Fabian Lehmann', - affiliation: '', - email: '', - github: '', - contribution: [], // List of contribution types ('author', 'maintainer' or 'contributor') - orcid: '' + affiliation: 'Humboldt-Universitaet zu Berlin', + email: 'fabian.lehmann@hu-berlin.de', + github: 'https://github.com/Lehmann-Fabian', + contribution: ['contributor'], // List of contribution types ('author', 'maintainer' or 'contributor') + orcid: 'https://orcid.org/0000-0003-0520-0792' ], [ name: ' David Frantz', - affiliation: '', - email: '', - github: '', - contribution: [], // List of contribution types ('author', 'maintainer' or 'contributor') - orcid: '' + affiliation: 'Trier University', + email: 'david.frantz@uni-trier.de', + github: 'https://github.com/davidfrantz', + contribution: ['contributor'], // List of contribution types ('author', 'maintainer' or 'contributor') + orcid: 'https://orcid.org/0000-0002-9292-3931' ], [ name: ' Felix Kummer', - affiliation: '', - email: '', - github: '', - contribution: [], // List of contribution types ('author', 'maintainer' or 'contributor') - orcid: '' + affiliation: 'Humboldt-Universitaet zu Berlin', + email: 'felix.kummer@hu-berlin.de', + github: 'https://github.com/Felix-Kummer', + contribution: ['author', 'maintainer'], // List of contribution types ('author', 'maintainer' or 'contributor') + orcid: 'https://orcid.org/0009-0007-1154-6980' ], ] homePage = 'https://github.com/nf-core/rangeland' diff --git a/nextflow_schema.json b/nextflow_schema.json index 000b361..faceec7 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -10,24 +10,67 @@ "type": "object", "fa_icon": "fas fa-terminal", "description": "Define where the pipeline should find input data and save output data.", - "required": ["input", "outdir"], + "required": ["input", "dem", "wvdb", "data_cube", "aoi", "endmember", "outdir"], "properties": { "input": { "type": "string", - "format": "file-path", + "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", + "format": "path" + }, + "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. 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" + }, + "data_cube": { + "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" + }, + "aoi": { + "type": "string", + "fa_icon": "fas fa-chart-area", "exists": true, - "schema": "assets/schema_input.json", - "mimetype": "text/csv", - "pattern": "^\\S+\\.csv$", - "description": "Path to comma-separated file containing information about the samples in the experiment.", - "help_text": "You will need to create a design file with information about the samples in your experiment before running the pipeline. Use this parameter to specify its location. It has to be a comma-separated file with 3 columns, and a header row. See [usage docs](https://nf-co.re/rangeland/usage#samplesheet-input).", - "fa_icon": "fas fa-file-csv" + "description": "Area of interest.", + "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", + "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$", + "format": "file-path", + "mimetype": "text/plain" }, "outdir": { "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", @@ -43,6 +86,130 @@ } } }, + "remote_sensing_image_options": { + "title": "Remote sensing image options", + "type": "object", + "description": "Definition of satellite image parameters.", + "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_level2": { + "type": "string", + "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", + "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\".", + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "format": "date" + }, + "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\".", + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "format": "date" + }, + "resolution": { + "type": "integer", + "default": 30, + "fa_icon": "fas fa-expand-arrows-alt", + "description": "Spatial resolution applied in analyses.", + "minimum": 1 + } + }, + "fa_icon": "fas fa-satellite" + }, + "higher_level_processing_modification": { + "title": "Higher level processing modification", + "type": "object", + "default": "", + "properties": { + "indexes": { + "type": "string", + "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](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", + "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", + "description": "Should the full time series stack be returned.", + "help_text": "This parameter enables or disables the output of the time series stack for each tile and band/index. Here, each band shows the values of a single date.", + "fa_icon": "fas fa-layer-group" + } + }, + "description": "Modify higher level processing behaviour.", + "help_text": "These parameters can be used to modify the behaviour of the time series analyses process in higher level processing.", + "fa_icon": "fas fa-microchip" + }, + "visualization": { + "title": "Visualization", + "type": "object", + "description": "Enable or disable visualizations.", + "default": "", + "properties": { + "mosaic_visualization": { + "type": "boolean", + "default": true, + "description": "Whether mosaic visualization should be returned.", + "fa_icon": "fas fa-image" + }, + "pyramid_visualization": { + "type": "boolean", + "default": true, + "description": "Whether pyramid visualization should be returned.", + "fa_icon": "far fa-image" + } + }, + "fa_icon": "fas fa-images" + }, + "workflow_configuration": { + "title": "Workflow configuration", + "type": "object", + "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, + "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.", + "fa_icon": "fas fa-project-diagram" + }, "institutional_config_options": { "title": "Institutional config options", "type": "object", @@ -193,6 +360,18 @@ { "$ref": "#/$defs/input_output_options" }, + { + "$ref": "#/$defs/remote_sensing_image_options" + }, + { + "$ref": "#/$defs/higher_level_processing_modification" + }, + { + "$ref": "#/$defs/visualization" + }, + { + "$ref": "#/$defs/workflow_configuration" + }, { "$ref": "#/$defs/institutional_config_options" }, diff --git a/nf-test.config b/nf-test.config new file mode 100644 index 0000000..843ed05 --- /dev/null +++ b/nf-test.config @@ -0,0 +1,11 @@ +config { + + testsDir "tests" + workDir ".nf-test" + configFile "tests/nextflow.config" + profile "docker,test" + + plugins { + load "nft-utils@0.0.3" + } +} diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json index 87c5761..19a1c1f 100644 --- a/ro-crate-metadata.json +++ b/ro-crate-metadata.json @@ -22,8 +22,8 @@ "@id": "./", "@type": "Dataset", "creativeWorkStatus": "Stable", - "datePublished": "2024-12-20T13:10:00+00:00", - "description": "

\n \n \n \"nf-core/rangeland\"\n \n

[![GitHub Actions CI Status](https://github.com/nf-core/rangeland/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/rangeland/actions/workflows/ci.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/rangeland/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/rangeland/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/rangeland/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX)\n[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)\n\n[![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A524.04.2-23aa62.svg)](https://www.nextflow.io/)\n[![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/)\n[![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/)\n[![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/)\n[![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://cloud.seqera.io/launch?pipeline=https://github.com/nf-core/rangeland)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23rangeland-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/rangeland)[![Follow on Twitter](http://img.shields.io/badge/twitter-%40nf__core-1DA1F2?labelColor=000000&logo=twitter)](https://twitter.com/nf_core)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core)\n\n## Introduction\n\n**nf-core/rangeland** is a bioinformatics pipeline that ...\n\n\n\n\n1. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/))2. Present QC for raw reads ([`MultiQC`](http://multiqc.info/))\n\n## Usage\n\n> [!NOTE]\n> 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.\n\n\n\nNow, you can run the pipeline using:\n\n\n\n```bash\nnextflow run nf-core/rangeland \\\n -profile \\\n --input samplesheet.csv \\\n --outdir \n```\n\n> [!WARNING]\n> 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/docs/usage/getting_started/configuration#custom-configuration-files).\n\nFor 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).\n\n## Pipeline output\n\nTo see the results of an example test run with a full size dataset refer to the [results](https://nf-co.re/rangeland/results) tab on the nf-core website pipeline page.\nFor more details about the output files and reports, please refer to the\n[output documentation](https://nf-co.re/rangeland/output).\n\n## Credits\n\nnf-core/rangeland was originally written by Fabian Lehmann, David Frantz, Felix Kummer.\n\nWe thank the following people for their extensive assistance in the development of this pipeline:\n\n\n\n## Contributions and Support\n\nIf you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md).\n\nFor further information or help, don't hesitate to get in touch on the [Slack `#rangeland` channel](https://nfcore.slack.com/channels/rangeland) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\n\n\n\n\nAn extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file.\n\nYou can cite the `nf-core` publication as follows:\n\n> **The nf-core framework for community-curated bioinformatics pipelines.**\n>\n> Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen.\n>\n> _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x).\n", + "datePublished": "2024-12-20T14:45:52+00:00", + "description": "

\n \n \n \"nf-core/rangeland\"\n \n

[![GitHub Actions CI Status](https://github.com/nf-core/rangeland/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/rangeland/actions/workflows/ci.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/rangeland/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/rangeland/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/rangeland/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX)\n[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)\n\n[![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A524.04.2-23aa62.svg)](https://www.nextflow.io/)\n[![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/)\n[![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/)\n[![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/)\n[![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://cloud.seqera.io/launch?pipeline=https://github.com/nf-core/rangeland)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23rangeland-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/rangeland)[![Follow on Twitter](http://img.shields.io/badge/twitter-%40nf__core-1DA1F2?labelColor=000000&logo=twitter)](https://twitter.com/nf_core)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core)\n\n## Introduction\n\n**nf-core/rangeland** is a geographical best-practice analysis pipeline for remotely sensed imagery.\nThe 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:\n\n1. Read satellite imagery, digital elevation model (dem), endmember definition, water vapor database (wvdb), datacube definition and area of interest definition (aoi)\n2. Generate allow list and analysis mask to determine which pixels from the satellite data can be used\n3. Preprocess data to obtain atmospherically corrected images alongside quality assurance information (aka. level 2 analysis read data)\n4. Merge spatially and temporally overlapping preprocessed data\n5. Classify pixels by applying linear spectral unmixing\n6. Time series analyses to obtain trends in vegetation dynamics to derive level 3 data\n7. Create mosaic and pyramid visualizations of the results\n8. Version reporting with MultiQC ([`MultiQC`](http://multiqc.info/))\n\n

\n \n

\n\n## Usage\n\n> [!NOTE]\n> 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.\n\nTo run, satellite imagery, water vapor data, a digital elevation model, endmember definitions, a datacube specification, and a area-of-interest specification are required as input data.\nPlease refer to the [usage documentation](https://nf-co.re/rangeland/usage) for details on the input structure.\n\nNow, you can run the pipeline using:\n\n```bash\nnextflow run nf-core/rangeland \\\n -profile \\\n --input \\\n --dem \\\n --wvdb \\\n --data_cube \\\n --aoi \\\n --endmember \\\n --outdir \n```\n\n> [!WARNING]\n> 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/docs/usage/getting_started/configuration#custom-configuration-files).\n\nFor 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).\n\n## Pipeline output\n\nTo see the results of an example test run with a full size dataset refer to the [results](https://nf-co.re/rangeland/results) tab on the nf-core website pipeline page.\nFor more details about the output files and reports, please refer to the\n[output documentation](https://nf-co.re/rangeland/output).\n\n## Credits\n\nThe rangeland workflow was originally written by:\n\n- [Fabian Lehmann](https://github.com/Lehmann-Fabian)\n- [David Frantz](https://github.com/davidfrantz)\n\nThe original workflow can be found on [github](https://github.com/CRC-FONDA/FORCE2NXF-Rangeland).\n\nTransformation to nf-core/rangeland was conducted by [Felix Kummer](https://github.com/Felix-Kummer).\nnf-core alignment started on the [nf-core branch of the original repository](https://github.com/CRC-FONDA/FORCE2NXF-Rangeland/tree/nf-core).\n\nWe thank the following people for their extensive assistance in the development of this pipeline:\n\n- [Fabian Lehmann](https://github.com/Lehmann-Fabian)\n- [Katarzyna Ewa Lewinska](https://github.com/kelewinska).\n\n## Acknowledgements\n\nThis pipeline was developed and aligned with nf-core as part of the [Foundations of Workflows for Large-Scale Scientific Data Analysis (FONDA)](https://fonda.hu-berlin.de/) initiative.\n\n[![FONDA](docs/images/fonda_logo2_cropped.png)](https://fonda.hu-berlin.de/)\n\nFONDA can be cited as follows:\n\n> **The Collaborative Research Center FONDA.**\n>\n> Ulf Leser, Marcus Hilbrich, Claudia Draxl, Peter Eisert, Lars Grunske, Patrick Hostert, Dagmar Kainm\u00fcller, Odej Kao, Birte Kehr, Timo Kehrer, Christoph Koch, Volker Markl, Henning Meyerhenke, Tilmann Rabl, Alexander Reinefeld, Knut Reinert, Kerstin Ritter, Bj\u00f6rn Scheuermann, Florian Schintke, Nicole Schweikardt, Matthias Weidlich.\n>\n> _Datenbank Spektrum_ 2021 doi: [10.1007/s13222-021-00397-5](https://doi.org/10.1007/s13222-021-00397-5)\n\n## Contributions and Support\n\nIf you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md).\n\nFor further information or help, don't hesitate to get in touch on the [Slack `#rangeland` channel](https://nfcore.slack.com/channels/rangeland) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\n\n\n\n\nAn extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file.\n\nYou can cite the `nf-core` publication as follows:\n\n> **The nf-core framework for community-curated bioinformatics pipelines.**\n>\n> Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen.\n>\n> _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x).\n\nThis pipeline is based one the publication listed below.\nThe publication can be cited as follows:\n\n> **FORCE on Nextflow: Scalable Analysis of Earth Observation Data on Commodity Clusters**\n>\n> [Lehmann, F., Frantz, D., Becker, S., Leser, U., Hostert, P. (2021). FORCE on Nextflow: Scalable Analysis of Earth Observation Data on Commodity Clusters. In CIKM Workshops.](https://www.informatik.hu-berlin.de/de/forschung/gebiete/wbi/research/publications/2021/force_nextflow.pdf/@@download/file/force_nextflow.pdf)\n", "hasPart": [ { "@id": "main.nf" @@ -31,6 +31,9 @@ { "@id": "assets/" }, + { + "@id": "bin/" + }, { "@id": "conf/" }, @@ -43,6 +46,9 @@ { "@id": "modules/" }, + { + "@id": "modules/local/" + }, { "@id": "modules/nf-core/" }, @@ -99,7 +105,7 @@ }, "mentions": [ { - "@id": "#ff6fd38a-efe6-4104-8942-4f765936a620" + "@id": "#ef20dac5-c495-414e-b454-5262623b063f" } ], "name": "nf-core/rangeland" @@ -132,7 +138,7 @@ } ], "dateCreated": "", - "dateModified": "2024-12-20T13:10:00Z", + "dateModified": "2024-12-20T15:45:52Z", "dct:conformsTo": "https://bioschemas.org/profiles/ComputationalWorkflow/1.0-RELEASE/", "keywords": [ "nf-core", @@ -182,11 +188,11 @@ "version": "!>=24.04.2" }, { - "@id": "#ff6fd38a-efe6-4104-8942-4f765936a620", + "@id": "#ef20dac5-c495-414e-b454-5262623b063f", "@type": "TestSuite", "instance": [ { - "@id": "#8d59bdf9-46cd-46ed-9f25-bca837e15392" + "@id": "#c395eb9b-579d-4fe8-9f81-fcb8eb9226b8" } ], "mainEntity": { @@ -195,7 +201,7 @@ "name": "Test suite for nf-core/rangeland" }, { - "@id": "#8d59bdf9-46cd-46ed-9f25-bca837e15392", + "@id": "#c395eb9b-579d-4fe8-9f81-fcb8eb9226b8", "@type": "TestInstance", "name": "GitHub Actions workflow for testing nf-core/rangeland", "resource": "repos/nf-core/rangeland/actions/workflows/ci.yml", @@ -217,6 +223,11 @@ "@type": "Dataset", "description": "Additional files" }, + { + "@id": "bin/", + "@type": "Dataset", + "description": "Scripts that must be callable from a pipeline process" + }, { "@id": "conf/", "@type": "Dataset", @@ -237,6 +248,11 @@ "@type": "Dataset", "description": "Modules used by the pipeline" }, + { + "@id": "modules/local/", + "@type": "Dataset", + "description": "Pipeline-specific modules" + }, { "@id": "modules/nf-core/", "@type": "Dataset", diff --git a/subworkflows/local/higher_level.nf b/subworkflows/local/higher_level.nf new file mode 100644 index 0000000..9c9fe43 --- /dev/null +++ b/subworkflows/local/higher_level.nf @@ -0,0 +1,65 @@ +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 { + + take: + 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, + resolution, + sensors_level2, + start_date, + end_date, + indexes, + return_tss + ) + ch_versions = ch_versions.mix(HIGHER_LEVEL_CONFIG.out.versions.first()) + + // main processing + 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() + + // visualizations + mosaic_files = Channel.empty() + 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()) + } + + 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] ] } ) + pyramid_files = FORCE_PYRAMID.out.trends + ch_versions = ch_versions.mix(FORCE_PYRAMID.out.versions.first()) + } + + emit: + mosaic = mosaic_files + pyramid = pyramid_files + trends = FORCE_HIGHER_LEVEL.out.trend_files + versions = ch_versions +} diff --git a/subworkflows/local/preprocessing.nf b/subworkflows/local/preprocessing.nf new file mode 100644 index 0000000..8690157 --- /dev/null +++ b/subworkflows/local/preprocessing.nf @@ -0,0 +1,82 @@ +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' + +workflow PREPROCESSING { + + take: + data + dem + wvdb + cube_file + aoi_file + group_size + resolution + + main: + + // Closure to extract the parent directory of a file + def extractDirectory = { it.parent.toString().substring(it.parent.toString().lastIndexOf('/') + 1 ) } + + ch_versions = Channel.empty() + + 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, resolution ) + ch_versions = ch_versions.mix(FORCE_GENERATE_ANALYSIS_MASK.out.versions) + + //Group masks by tile + masks = FORCE_GENERATE_ANALYSIS_MASK.out.masks.flatten().map{ x -> [ extractDirectory(x), x ] } + + // Preprocessing configuration + PREPROCESS_CONFIG( data, cube_file, FORCE_GENERATE_TILE_ALLOW_LIST.out.tile_allow, dem, wvdb ) + ch_versions = ch_versions.mix(PREPROCESS_CONFIG.out.versions.first()) + + // Main preprocessing + FORCE_PREPROCESS( PREPROCESS_CONFIG.out.preprocess_config_and_data) + ch_versions = ch_versions.mix(FORCE_PREPROCESS.out.versions.first()) + + //Group by tile, date and sensor + boa_tiles = FORCE_PREPROCESS.out.boa_tiles.flatten().map{ [ "${extractDirectory(it)}_${it.simpleName}", it ] }.groupTuple() + qai_tiles = FORCE_PREPROCESS.out.qai_tiles.flatten().map{ [ "${extractDirectory(it)}_${it.simpleName}", it ] }.groupTuple() + + //Find tiles to merge + boa_tiles_to_merge = boa_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 : 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 : 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] ] } + qai_tiles_done = qai_tiles.filter{ x -> x[1].size() == 1 }.map{ x -> [ x[0] .substring( 0, 11 ), x[1][0] ] } + + MERGE_BOA( "boa", boa_tiles_to_merge, cube_file ) + ch_versions = ch_versions.mix(MERGE_BOA.out.versions.first()) + + MERGE_QAI( "qai", qai_tiles_to_merge, cube_file ) + ch_versions = ch_versions.mix(MERGE_QAI.out.versions.first()) + + //Concat merged list with single images, group by tile over time + boa_tiles = MERGE_BOA.out.tiles_merged + .concat( boa_tiles_done ).groupTuple() + .map { [it[0], it[1].flatten() ] } + qai_tiles = MERGE_QAI.out.tiles_merged + .concat( qai_tiles_done ).groupTuple() + .map { [it[0], it[1].flatten() ] } + + emit: + tiles_and_masks = boa_tiles.join( qai_tiles ).join( masks ) + versions = ch_versions +} diff --git a/subworkflows/local/utils_nfcore_rangeland_pipeline/main.nf b/subworkflows/local/utils_nfcore_rangeland_pipeline/main.nf index 0119397..3994714 100644 --- a/subworkflows/local/utils_nfcore_rangeland_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_rangeland_pipeline/main.nf @@ -63,32 +63,8 @@ workflow PIPELINE_INITIALISATION { nextflow_cli_args ) - // - // Create channel from input file provided through params.input - // - - Channel - .fromList(samplesheetToList(params.input, "${projectDir}/assets/schema_input.json")) - .map { - meta, fastq_1, fastq_2 -> - if (!fastq_2) { - return [ meta.id, meta + [ single_end:true ], [ fastq_1 ] ] - } else { - return [ meta.id, meta + [ single_end:false ], [ fastq_1, fastq_2 ] ] - } - } - .groupTuple() - .map { samplesheet -> - validateInputSamplesheet(samplesheet) - } - .map { - meta, fastqs -> - return [ meta, fastqs.flatten() ] - } - .set { ch_samplesheet } emit: - samplesheet = ch_samplesheet versions = ch_versions } @@ -164,13 +140,12 @@ def validateInputSamplesheet(input) { // Generate methods description for MultiQC // def toolCitationText() { - // TODO nf-core: Optionally add in-text citation tools to this list. // Can use ternary operators to dynamically construct based conditions, e.g. params["run_xyz"] ? "Tool (Foo et al. 2023)" : "", // Uncomment function in methodsDescriptionText to render in MultiQC report def citation_text = [ "Tools used in the workflow included:", - "FastQC (Andrews 2010),", "MultiQC (Ewels et al. 2016)", + "FORCE (Frantz 2019)", "." ].join(' ').trim() @@ -178,12 +153,11 @@ def toolCitationText() { } def toolBibliographyText() { - // TODO nf-core: Optionally add bibliographic entries to this list. // Can use ternary operators to dynamically construct based conditions, e.g. params["run_xyz"] ? "
  • Author (2023) Pub name, Journal, DOI
  • " : "", // Uncomment function in methodsDescriptionText to render in MultiQC report def reference_text = [ - "
  • Andrews S, (2010) FastQC, URL: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/).
  • ", - "
  • Ewels, P., Magnusson, M., Lundin, S., & Käller, M. (2016). MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics , 32(19), 3047–3048. doi: /10.1093/bioinformatics/btw354
  • " + "
  • Ewels, P., Magnusson, M., Lundin, S., & Käller, M. (2016). MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics , 32(19), 3047–3048. doi: /10.1093/bioinformatics/btw354
  • ", + "
  • Frantz, D. (2019). FORCE—Landsat + Sentinel-2 Analysis Ready Data and Beyond. Remote Sensing, 11, 1124 doi: https://doi.org/10.3390/rs11091124
  • " ].join(' ').trim() return reference_text @@ -213,9 +187,8 @@ def methodsDescriptionText(mqc_methods_yaml) { meta["tool_citations"] = "" meta["tool_bibliography"] = "" - // TODO nf-core: Only uncomment below if logic in toolCitationText/toolBibliographyText has been filled! - // meta["tool_citations"] = toolCitationText().replaceAll(", \\.", ".").replaceAll("\\. \\.", ".").replaceAll(", \\.", ".") - // meta["tool_bibliography"] = toolBibliographyText() + meta["tool_citations"] = toolCitationText().replaceAll(", \\.", ".").replaceAll("\\. \\.", ".").replaceAll(", \\.", ".") + meta["tool_bibliography"] = toolBibliographyText() def methods_text = mqc_methods_yaml.text 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/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..ded1bbb --- /dev/null +++ b/tests/default.nf.test.snap @@ -0,0 +1,1193 @@ +{ + "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_rangeland_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_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-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-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_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-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-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_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-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-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_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_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-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-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_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-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-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_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-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-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_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_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-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-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_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-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-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_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-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-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_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_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-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-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_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-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-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_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-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-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_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_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-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-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_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-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-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_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-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-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_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_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-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-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_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-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-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_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-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-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_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_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-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-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_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-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-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_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-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-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_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_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-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-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_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-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-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_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-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-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/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", + "untar", + "untar/Landsat_data", + "untar/dem", + "untar/wvdb" + ] + ], + "meta": { + "nf-test": "0.9.1", + "nextflow": "24.10.3" + }, + "timestamp": "2024-12-20T16:29:07.149324288" + } +} \ No newline at end of file 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/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..f202739 --- /dev/null +++ b/tests/tweaked_params.nf.test.snap @@ -0,0 +1,902 @@ +{ + "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_rangeland_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_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_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-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-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_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-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-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_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-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-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_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_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_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-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-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_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-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-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_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-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-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_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_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_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-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-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_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-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-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_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-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-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_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_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_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-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-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_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-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-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_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-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-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/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", + "untar", + "untar/Landsat_data", + "untar/dem", + "untar/wvdb" + ] + ], + "meta": { + "nf-test": "0.9.1", + "nextflow": "24.10.3" + }, + "timestamp": "2024-12-20T16:32:22.473690225" + } +} \ 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 new file mode 100644 index 0000000..4a2affe --- /dev/null +++ b/tests_large/check_test_full_results.nf.test @@ -0,0 +1,57 @@ +// 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. + +// 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 | requires 400GB free space") { + + 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 d8d5540..8cc12a1 100644 --- a/workflows/rangeland.nf +++ b/workflows/rangeland.nf @@ -3,13 +3,36 @@ IMPORT MODULES / SUBWORKFLOWS / FUNCTIONS ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -include { FASTQC } from '../modules/nf-core/fastqc/main' + include { MULTIQC } from '../modules/nf-core/multiqc/main' include { paramsSummaryMap } from 'plugin/nf-schema' include { paramsSummaryMultiqc } from '../subworkflows/nf-core/utils_nfcore_pipeline' include { softwareVersionsToYAML } from '../subworkflows/nf-core/utils_nfcore_pipeline' include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_rangeland_pipeline' +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + IMPORT LOCAL MODULES/SUBWORKFLOWS +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ + +// +// SUBWORKFLOW: Consisting of a mix of local and nf-core/modules +// +include { PREPROCESSING } from '../subworkflows/local/preprocessing' +include { HIGHER_LEVEL } from '../subworkflows/local/higher_level' + +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + IMPORT NF-CORE MODULES/SUBWORKFLOWS +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ + +// +// MODULE: Installed directly from nf-core/modules +// +include { UNTAR as UNTAR_INPUT; UNTAR as UNTAR_DEM; UNTAR as UNTAR_WVDB; UNTAR as UNTAR_REF } from '../modules/nf-core/untar/main' + /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ RUN MAIN WORKFLOW @@ -18,20 +41,128 @@ include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_rang workflow RANGELAND { - take: - ch_samplesheet // channel: samplesheet read in from --input main: - ch_versions = Channel.empty() + // checks whether provided input is within provided time range + def inRegion = { + Integer date = it.simpleName.split("_")[3] as Integer + Integer start = params.start_date.replace('-','') as Integer + Integer end = params.end_date.replace('-','') as Integer + + return date >= start && date <= end + } + + ch_versions = Channel.empty() ch_multiqc_files = Channel.empty() // - // MODULE: Run FastQC + // Stage and validate input files // - FASTQC ( - ch_samplesheet + 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 ) + + // + // MODULE: untar + // + tar_versions = Channel.empty() + + // 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 + } + .set{ ch_input_types } + + UNTAR_INPUT(ch_input_types.archives) + ch_untared_inputs = UNTAR_INPUT.out.untar.map{ it[1] } + tar_versions = tar_versions.mix(UNTAR_INPUT.out.versions) + + data = data + .mix(ch_untared_inputs, ch_input_types.dirs) + .map{ dirs -> file("${dirs.toUriString()}/*/*", type: 'dir', checkIfExists: true) }.flatten() + .filter{ dir -> inRegion(dir) } + .map { dir -> + log.debug "Found ${dir}" + dir + } + + data.ifEmpty { + error "[nf-core/rangeland] ERROR: No directories found in input path or .tar file!" + } + + // 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 } + + UNTAR_DEM(ch_dem_types.archives) + ch_untared_dem = UNTAR_DEM.out.untar.map{ it[1] } + tar_versions = tar_versions.mix(UNTAR_DEM.out.versions) + + 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[1] } + tar_versions = tar_versions.mix(UNTAR_WVDB.out.versions) + + wvdb = wvdb.mix(ch_untared_wvdb, ch_wvdb_types.dirs).first() + + ch_versions = ch_versions.mix(tar_versions.first()) + + // + // SUBWORKFLOW: Preprocess satellite imagery + // + PREPROCESSING ( + data, + dem, + wvdb, + cube_file, + aoi_file, + params.group_size, + params.resolution ) - ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}) - ch_versions = ch_versions.mix(FASTQC.out.versions.first()) + 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, + 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.map{ it[1] }.flatten().buffer( size: Integer.MAX_VALUE, remainder: true ) // // Collate and save software versions @@ -85,7 +216,12 @@ workflow RANGELAND { [] ) - emit:multiqc_report = MULTIQC.out.report.toList() // channel: /path/to/multiqc_report.html + 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) ] }