diff --git a/.github/decrypt_secret.sh b/.github/decrypt_secret.sh
deleted file mode 100755
index 60176fdf..00000000
--- a/.github/decrypt_secret.sh
+++ /dev/null
@@ -1,52 +0,0 @@
-#!/bin/sh
-
-# Decrypt the file
-
-mkdir -p $HOME/.config/earthengine/ndef/
-
-mkdir -p /home/rstudio/.config/earthengine/ndef/
-
-mkdir -p /github/home/config/earthengine
-
-mkdir -p ./secrets
-
-# --batch to prevent interactive command
-# --yes to assume "yes" for questions
-
-
-# Decrypt ee credentials (currently decrypting to a bunch of places hoping that earth engine finds one)
-
-gpg --quiet --batch --yes --decrypt --passphrase="$RGEE_SECRET" \
---output $HOME/.config/earthengine/ndef/credentials ./scratch_code/credentials.gpg
-
-gpg --quiet --batch --yes --decrypt --passphrase="$RGEE_SECRET" \
---output /home/rstudio/.config/earthengine/ndef/credentials ./scratch_code/credentials.gpg
-
-gpg --quiet --batch --yes --decrypt --passphrase="$RGEE_SECRET" \
---output ~/.config/earthengine/credentials ./scratch_code/credentials.gpg
-
-gpg --quiet --batch --yes --decrypt --passphrase="$RGEE_SECRET" \
---output /github/home/config/earthengine/credentials ./scratch_code/credentials.gpg
-
-
-# Decrypt google drive credentials
-gpg --quiet --batch --yes --decrypt --passphrase="$RGEE_SECRET" \
---output $HOME/.config/earthengine/ndef/20061abcbc1c6ecf51bd9cf7e37350f6_bmaitner@gmail.com ./scratch_code/20061abcbc1c6ecf51bd9cf7e37350f6_bmaitner@gmail.com.gpg
-
-gpg --quiet --batch --yes --decrypt --passphrase="$RGEE_SECRET" \
---output /home/rstudio/.config/earthengine/ndef/20061abcbc1c6ecf51bd9cf7e37350f6_bmaitner@gmail.com ./scratch_code/20061abcbc1c6ecf51bd9cf7e37350f6_bmaitner@gmail.com.gpg
-
-
-# Decrypt google drive credentials json creds
-
-#Note: directly encrypting hte .json provided by Google failed. Instead, I loaded it into R, re-saved it, THEN encrypted the new version.
-
-echo " json token "
-
-gpg --batch --yes --decrypt --passphrase="$RGEE_SECRET" \
---output ./secrets/ee-wilsonlab-emma-ef416058504a.json ./scratch_code/ee-wilsonlab-emma-ef416058504a.json.gpg
-
-#Encrypting
-
- #gpg --output your-json-token.json.gpg --symmetric your-json-token.json
-
diff --git a/.github/decrypt_secret_gd.sh b/.github/decrypt_secret_gd.sh
deleted file mode 100644
index 77c91518..00000000
--- a/.github/decrypt_secret_gd.sh
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/bin/sh
-
-# Decrypt the file
-
-
-# --batch to prevent interactive command
-# --yes to assume "yes" for questions
-
-
-# Decrypt google drive credentials (newer version)
-gpg --quiet --batch --yes --decrypt --passphrase="$GD_SECRET" \
---output /home/rstudio/.config/earthengine/ndef/maitner-f590bfc7be54.json ./scratch_code/maitner-f590bfc7be54.json.gpg
-
-gpg --quiet --batch --yes --decrypt --passphrase="$GD_SECRET" \
---output $HOME/.config/earthengine/ndef/maitner-f590bfc7be54.json ./scratch_code/maitner-f590bfc7be54.json.gpg
-
-gpg --quiet --batch --yes --decrypt --passphrase="$GD_SECRET" \
---output $HOME/.config/earthengine/ndef/maitner-f590bfc7be54.json ./scratch_code/maitner-f590bfc7be54.json.gpg
-
diff --git a/.github/workflow-logs/failure-20260115-033017.log b/.github/workflow-logs/failure-20260115-033017.log
new file mode 100644
index 00000000..f070912f
--- /dev/null
+++ b/.github/workflow-logs/failure-20260115-033017.log
@@ -0,0 +1,171 @@
+Starting tar_make()
+[1] "Starting tar_make() - print"
+qs 0.27.3. Announcement: https://github.com/qsbase/qs/issues/103
+Registered S3 method overwritten by 'httr':
+ method from
+ print.cache_info hoardr
+
+Attaching package: ‘arrow’
+
+The following object is masked from ‘package:utils’:
+
+ timestamp
+
+System info: sysname=Linux; release=6.11.0-1018-azure; version=#18~24.04.1-Ubuntu SMP Sat Jun 28 04:46:03 UTC 2025; nodename=440c605558f8; machine=x86_64; login=unknown; user=root; effective_user=root
+Run mode: update
+[1] "R/appeears_auth.R"
+Setting up NASA EarthData authentication (keyring file backend)
+AppEEARS authentication configured
+[1] "R/data_chelsa.R"
+terra 1.8.86
+
+Attaching package: ‘terra’
+
+The following object is masked from ‘package:arrow’:
+
+ buffer
+
+[1] "R/data_vegmap.R"
+[1] "R/domain_bbox.R"
+[1] "R/domain_define_bioscape.R"
+[1] "R/domain_define.R"
+[1] "R/domain_figures.R"
+[1] "R/domain_rasterize.R"
+[1] "R/download_vegmap_release.R"
+[1] "R/functions.R"
+[1] "R/get_country.R"
+[1] "R/get_elevation.R"
+[1] "R/get_release_alos.R"
+[1] "R/get_release_climate_chelsa.R"
+[1] "R/get_release_clouds_wilson.R"
+[1] "R/get_release_fire_modis_appeears.R"
+[1] "R/get_release_landcover_za.R"
+[1] "R/get_release_ndvi_evi_modis_appeears.R"
+[1] "R/get_release_ndvi_viirs_appeears.R"
+[1] "R/get_release_precipitation_chelsa.R"
+[1] "R/get_release_soil_gcfr.R"
+[1] "R/get_release_template_raster.R"
+── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
+✔ dplyr 1.1.4 ✔ readr 2.1.5
+✔ forcats 1.0.1 ✔ stringr 1.6.0
+✔ ggplot2 4.0.0 ✔ tibble 3.3.0
+✔ lubridate 1.9.4 ✔ tidyr 1.3.1
+✔ purrr 1.2.0
+── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
+✖ lubridate::duration() masks arrow::duration()
+✖ tidyr::extract() masks terra::extract()
+✖ dplyr::filter() masks stats::filter()
+✖ readr::guess_encoding() masks rvest::guess_encoding()
+✖ dplyr::lag() masks stats::lag()
+ℹ Use the conflicted package () to force all conflicts to become errors
+[1] "R/git_functions.R"
+[1] "R/model_data.R"
+[1] "R/process_dynamic_data.R"
+[1] "R/process_fix_modis_NDVI_release_extent.R"
+[1] "R/process_fix_modis_projection.R"
+[1] "R/process_fix_modis_release_extent.R"
+[1] "R/process_fix_modis_release_projection_and_extent.R"
+[1] "R/process_fix_modis_release_projection.R"
+[1] "R/process_release_alos.R"
+[1] "R/process_release_burn_date_to_last_burned_date.R"
+Linking to GEOS 3.12.1, GDAL 3.8.4, PROJ 9.4.0; sf_use_s2() is TRUE
+[1] "R/process_release_climate_chelsa.R"
+[1] "R/process_release_clouds_wilson.R"
+[1] "R/process_release_dynamic_data_to_parquet.R"
+[1] "R/process_release_elevation_nasadem.R"
+[1] "R/process_release_fire_doy_to_unix_date.R"
+[1] "R/process_release_landcover_za.R"
+[1] "R/process_release_ndvi_relative_days_since_fire.R"
+[1] "R/process_release_precipitation_chelsa.R"
+[1] "R/process_release_protected_area_distance.R"
+udunits database from /usr/share/xml/udunits/udunits2.xml
+[1] "R/process_release_soil_gcfr.R"
+[1] "R/process_release_stable_data.R"
+[1] "R/process_stable_data.R"
+[1] "R/release_data.R"
+[1] "R/robust_download_file.R"
+[1] "R/robust_pb_download.R"
+[1] "R/robust_pb_upload.R"
+[1] "R/tar_release_storage.R"
+[1] "R/vegetation_map.R"
+Objects: clean_data
+Objects: data_vegmap
+Objects: domain_define
+Objects: domain_map
+Objects: domain_rasterize
+Objects: download_vegmap_release
+Objects: earthdata_pass
+Objects: earthdata_user
+Objects: existing_kr
+Objects: fit_model
+Objects: get_alos_data
+Objects: get_chelsa
+Objects: get_country
+Objects: get_elevation
+Objects: get_model_data
+Objects: get_release_alos
+Objects: get_release_climate_chelsa
+Objects: get_release_clouds_wilson
+Objects: get_release_fire_modis_appeears
+Objects: get_release_landcover_za
+Objects: get_release_ndvi_evi_modis_appeears
+Objects: get_release_ndvi_viirs_appeears
+Objects: get_release_precipitation_chelsa
+Objects: get_release_soil_gcfr
+Objects: get_release_template_raster
+Objects: get_vegmap
+Objects: group_data_function
+Objects: kr_name
+Objects: kr_pwd
+Objects: make_domain_bbox
+Objects: max_layers
+Objects: process_dynamic_data_to_parquet
+Objects: process_fix_modis_NDVI_release_extent
+Objects: process_fix_modis_projection
+Objects: process_fix_modis_release_extent
+Objects: process_fix_modis_release_projection
+Objects: process_fix_modis_release_projection_and_extent
+Objects: process_release_alos
+Objects: process_release_burn_date_to_last_burned_date
+Objects: process_release_climate_chelsa
+Objects: process_release_clouds_wilson
+Objects: process_release_dynamic_data_to_parquet
+Objects: process_release_elevation_nasadem
+Objects: process_release_fire_doy_to_unix_date
+Objects: process_release_landcover_za
+Objects: process_release_ndvi_relative_days_since_fire
+Objects: process_release_precipitation_chelsa
+Objects: process_release_protected_area_distance
+Objects: process_release_soil_gcfr
+Objects: process_release_stable_data
+Objects: process_stable_data
+Objects: release_data
+Objects: robust_download_file
+Objects: robust_max
+Objects: robust_min
+Objects: robust_pb_download
+Objects: robust_pb_download_solo
+Objects: robust_pb_upload
+Objects: rstoken
+Objects: run_mode
+Objects: sleep_time
+Objects: spatial_outputs
+Objects: stan_data_function
+Objects: summarize_posteriors
+Objects: sys_info
+Objects: tag
+Objects: tar_github_release_repo
+Objects: tar_github_release_resources
+Objects: temp_directory
+Objects: update_git
+Objects: verbose
++ vegmap_shp dispatched
+Downloading vegmap from GitHub release using piggyback...
+Unzipping vegmap...
+✖ vegmap_shp errored
+✖ errored pipeline [12.3s, 0 completed, 1 skipped]
+Error:
+! Error in tar_make():
+ Error resolving output location: missing files: data/manual_download/NVM2024/shapefile/NVM2024Final_IEM5_12_07012025.shp
+ See https://books.ropensci.org/targets/debugging.html
+Execution halted
diff --git a/.github/workflows/targets.yaml b/.github/workflows/targets.yaml
index 314a3032..d6bdee8a 100644
--- a/.github/workflows/targets.yaml
+++ b/.github/workflows/targets.yaml
@@ -30,109 +30,47 @@ on:
branches:
- main
- master
+ - dev-adam-appeears
- dev-jiyeon
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
schedule:
- # - cron: '1 0 * * 0' # runs every Sunday at 00:01
- - cron: '0 0 * * *' # runs every day at midnight
+ - cron: '0 0 * * 0' # runs every Sunday at midnight UTC
+ # - cron: '0 0 * * *' # runs every day at midnight
# - cron: '0 */6 * * *' # run every 6th hour
name: targets
jobs:
targets:
- runs-on: ubuntu-24.04 #ubuntu-22.04
+ runs-on: ubuntu-latest
container: adamwilsonlab/emma:latest
+ permissions:
+ contents: write
+ pull-requests: write
+ issues: write
env:
GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }}
+ R_KEEP_PKG_SOURCE: yes
+ EARTHDATA_PASSWORD: ${{ secrets.EARTHDATA_PASSWORD }}
+ EARTHDATA_USER: ${{ secrets.EARTHDATA_USER }}
RENV_PATHS_ROOT: ~/.local/share/renv
ACTIONS_RUNNER_DEBUG: true
- PYTHONPATH: /opt/conda/envs/r-reticulate/bin/python
- RETICULATE_PYTHON: /opt/conda/envs/r-reticulate/bin/python
- # GARGLE_AUTH_FILE: secrets/ee-wilsonlab-emma-ef416058504a.json
- GOOGLE_APPLICATION_CREDENTIALS: secrets/ee-wilsonlab-emma-ef416058504a.json
steps:
- uses: actions/checkout@v2
with:
- ref: main
+ ref: dev-adam-appeears
lfs: true
- name: Whitelist directory
run: git config --global --add safe.directory /__w/emma_envdata/emma_envdata
- - name: Checkout LFS objects
- run: git lfs checkout
- continue-on-error: true
- # - name: List files in scratch_code
- # run: ls -lh scratch_code/
-# - name: Setup Python
-# uses: actions/setup-python@v2
-# with:
-# python-version: '3.x'
-# - name: Install Python Dependencies
-# run: |
-# pip install earthengine-api
-# pip install -r requirements.txt # If you have other dependencies listed in a requirements file
-# - name: Verify Python Installation
-# run: |
-# python -m pip show earthengine-api
-# python -c "import ee; print(ee.__version__)"
-# # - name: Install Linux system dependencies
-# # if: runner.os == 'Linux'
-# # run: |
-# # sudo apt-get update
- - name: Install Google Cloud SDK in container
+ - name: Install system deps for keyring
run: |
apt-get update
- apt-get install -y curl apt-transport-https ca-certificates gnupg
- echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" \
- | tee /etc/apt/sources.list.d/google-cloud-sdk.list
- curl https://packages.cloud.google.com/apt/doc/apt-key.gpg \
- | apt-key --keyring /usr/share/keyrings/cloud.google.gpg add -
- apt-get update
- apt-get install -y google-cloud-cli=492.0.0-0
- - name: DECRYPT rgee SECRETS
- run: ./.github/decrypt_secret.sh
- env:
- RGEE_SECRET: ${{ secrets.RGEE_SECRET }}
- continue-on-error: true
- # - name: List files in secrets
- # run: ls -lh secrets/
-# - name: Check git settings
-# run:
-# git config --get http.postBuffer
-# continue-on-error: true
-
- # - name: Display Service Account JSON
- # run: |
- # echo "=== Service Account JSON ==="
- # cat secrets/ee-wilsonlab-emma-ef416058504a.json
- # echo "============================"
-
- - name: Install Earth Engine API 1.5.4 in r-reticulate env
- run: |
- /opt/conda/envs/r-reticulate/bin/pip install --upgrade earthengine-api==0.1.370 #0.1.381
- # conda install -n r-reticulate -y -c conda-forge earthengine-api=1.5.4
-
- - name: Verify EE API version
- run: |
- /opt/conda/envs/r-reticulate/bin/pip show earthengine-api
-
+ apt-get install -y libsecret-1-0 libsecret-1-dev
- name: Install R Package Dependencies
run: |-
Rscript -e "questionr::qscan(list.files(pattern='*.R',recursive=T), load = TRUE, detail = TRUE)" # this scans all scripts and installs any needed packages
- # - name: Upgrade rgee to latest from GitHub
- # run: |
- # Rscript -e "if (!requireNamespace('devtools', quietly = TRUE)) install.packages('devtools')"
- # Rscript -e 'devtools::install_github("r-spatial/rgee", ref="v.1.1.5")'
-
- # - name: Install rgee v1.1.5 from CRAN Archive
- # run: |
- # Rscript -e 'if (!requireNamespace("remotes", quietly=TRUE)) install.packages("remotes", repos="https://cloud.r-project.org")'
- # Rscript -e 'remotes::install_version("rgee", version="1.1.5", repos="https://cloud.r-project.org")'
-
- - name: Install rgee from bmaitner/rgee
- run: Rscript -e 'devtools::install_github(repo = "bmaitner/rgee", ref = "noninteractive_auth")'
- name: Parse _targets.R
run: Rscript -e "parse('_targets.R')"
@@ -144,175 +82,143 @@ jobs:
key: ${{ runner.os }}-renv-${{ hashFiles('**/renv.lock') }}
restore-keys: ${{ runner.os }}-renv-
- - name: Authenticate to GCP
- run: |
- # write the JSON secret to disk
- # activate the service account (no --scopes flag)
- gcloud auth activate-service-account \
- --key-file="secrets/ee-wilsonlab-emma-ef416058504a.json" \
- --project=ee-wilsonlab-emma \
- --quiet
-
- - name: Add r-reticulate env to PATH
- run: echo "/opt/conda/envs/r-reticulate/bin" >> $GITHUB_PATH
-
- # - name: Authenticate Earth Engine
- # run: earthengine authenticate \
- # --service_account \
- # --quiet \
- # #--key_file=${{ runner.temp }}/gee-key.json
-
- # - name: Authenticate to GCP (ADC with scopes)
- # run: |
- # gcloud auth application-default login \
- # --project=ee-wilsonlab-emma \
- # --scopes=https://www.googleapis.com/auth/cloud-platform \
- # --quiet
-
- # - name: Restore packages
- # shell: Rscript {0}
- # run: |
- # if (!requireNamespace("renv", quietly = TRUE)) install.packages("renv")
- # renv::restore()
-
- - name: Check if previous runs exists
- id: runs-exist
- run: git ls-remote --exit-code --heads origin targets-runs
- continue-on-error: true
-
- - name: Checkout previous run
- if: steps.runs-exist.outcome == 'success'
- uses: actions/checkout@v2
+ - name: Cache targets store
+ uses: actions/cache@v3
with:
- ref: targets-runs
- fetch-depth: 1
- path: .targets-runs
- lfs: 'true' #attempting to fix issue with target-committed lfs files not being treated as lfs
-
- - name: Restore output files from the previous run
- if: steps.runs-exist.outcome == 'success'
+ path: _targets/
+ key: targets-${{ hashFiles('_targets.R', 'R/**') }}
+ restore-keys: targets-
+ - name: Run targets pipeline
+ run: |
+ Rscript -e "targets::tar_make()" 2>&1 | tee targets-output.log
+ shell: bash
+ - name: Export final data products to releases
+ if: github.ref == 'refs/heads/main'
run: |
- for (dest in scan(".targets-runs/.targets-files", what = character())) {
- source <- file.path(".targets-runs", dest)
- if (!file.exists(dirname(dest))) dir.create(dirname(dest), recursive = TRUE)
- if (file.exists(source)) file.rename(source, dest)
+ # Load final targets and export to data/releases/
+ targets::tar_load_everything()
+
+ # Create releases directory
+ dir.create("data/releases", recursive = TRUE, showWarnings = FALSE)
+
+ # Export domain as gpkg (example - adjust to your actual target names)
+ if (exists("domain")) {
+ sf::st_write(
+ sf::st_as_sf(domain),
+ "data/releases/domain.gpkg",
+ delete_dsn = TRUE
+ )
}
+
+ # Add other final outputs here as needed
+ # Example: write.csv(final_data, "data/releases/final_data.csv")
+
shell: Rscript {0}
- # - name: Find credential JSON
- # run: |
- # echo "Searching for ee-wilsonlab-emma-ef416058504a.json ..."
- # find / -name 'ee-wilsonlab-emma-ef416058504a.json' 2>/dev/null || true
-# - name: Run targets pipeline
-# run: |
-# Sys.setenv(HOME="/home/rstudio")
-# cmdstanr::set_cmdstan_path("/home/rstudio/.cmdstanr/cmdstan-2.28.1")
-# cmdstanr::check_cmdstan_toolchain()
-# #cmdstanr::install_cmdstan()
-# targets::tar_make()
-# shell: Rscript {0}
-# - name: Run targets pt 1
-# run: |
-# Sys.setenv(HOME="/home/rstudio")
-# cmdstanr::set_cmdstan_path("/home/rstudio/.cmdstanr/cmdstan-2.28.1")
-# cmdstanr::check_cmdstan_toolchain()
-# #cmdstanr::install_cmdstan()
-# shell: Rscript {0}
- - name: Verify credentials
- run: |
- ./.github/decrypt_secret.sh
-# ls ~/.config/earthengine
-# /usr/bin/earthengine -h
-# echo " main dir"
-# ls
-# echo "scratch dir"
-# ls scratch_code
-# echo "secrets dir"
-# ls secrets
- env:
- RGEE_SECRET: ${{ secrets.RGEE_SECRET }}
- GD_SECRET: ${{ secrets.GD_SECRET }}
continue-on-error: true
- # - name: Install custom rgee
- # run: |
- # # added below on april 9 from https://github.com/r-spatial/rgee/issues/353#issuecomment-1983765552
- # library(reticulate)
- # py_config() # see the name of your conda (python) environment, in my case "r-reticulate"
- # reticulate::py_install('earthengine-api==0.1.370', envname='r-reticulate')
- # # Check the installation of "earthengine-api" with
- # py_list_packages()
- # pyl <- py_list_packages()
- # pyl[pyl$package == "earthengine-api", ]
- # # check python version with
- # py_run_string("import sys; print(sys.version)")
- # devtools::install_github(repo = "bmaitner/rgee", ref = "noninteractive_auth")
- # - name: Install custom rgee
- # run: |
- # Rscript -e "library(reticulate)"
- # Rscript -e "reticulate::py_install('earthengine-api==0.1.370', envname='r-reticulate')"
- # Rscript -e "pyl <- py_list_packages(); print(pyl[pyl$package == 'earthengine-api', ])"
- # Rscript -e "reticulate::py_run_string('import sys; print(sys.version)')"
- # Rscript -e "devtools::install_github(repo = 'bmaitner/rgee', ref = 'noninteractive_auth')"
-# shell: Rscript {0}
- # - name: Print environment
- # run: env
- # - name: Print R session info
- # run: Rscript -e 'sessionInfo()'
- # - name: “Set up gcloud CLI”
- # uses: google-github-actions/setup-gcloud@v1
- # with:
- # project_id: ${{ secrets.GCP_PROJECT }}
- # service_account_key: ${{ secrets.GCP_SA_KEY }}
- - name: Run targets pt 2
+
+ - name: Upload to GitHub Releases
+ if: github.ref == 'refs/heads/main'
+ uses: softprops/action-gh-release@v1
+ with:
+ tag_name: latest
+ files: |
+ data/releases/*
+ body: |
+ Latest data products from targets pipeline
+ Updated: ${{ github.event.head_commit.timestamp }}
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Install GitHub CLI
+ if: failure() && github.event_name == 'push'
run: |
- #reticulate::use_python('/usr/bin/python3')
- #rgee::ee_set_pyenv('/usr/bin/python3','r-reticulate', confirm = F)
- #targets::tar_destroy(destroy = "all",ask = FALSE) #uncomment to reset
- targets::tar_make()
- shell: Rscript {0}
- - name: Identify files that the targets pipeline produced
- run: git ls-files -mo --exclude=renv > .targets-files
- - name: Create the runs branch if it does not already exist
- if: steps.runs-exist.outcome != 'success'
- run: git checkout --orphan targets-runs
- - name: Put the worktree in the runs branch if the latter already exists
- if: steps.runs-exist.outcome == 'success'
+ apt-get update
+ apt-get install -y gh
+
+ - name: Create review PR on failure
+ if: failure() && github.event_name == 'push'
+ env:
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
- rm -r .git
- mv .targets-runs/.git .
- rm -r .targets-runs
+ # Create error log if it doesn't exist
+ if [ ! -f targets-output.log ]; then
+ echo "No targets-output.log file found. Pipeline may have failed during execution." > targets-output.log
+ fi
+ # Get last 100 lines of error
+ tail -100 targets-output.log > error-summary.txt
+
+ # Create branch
+ BRANCH="auto-fix-$(date +%s)"
+ git config user.name "github-actions[bot]"
+ git config user.email "github-actions[bot]@users.noreply.github.com"
+ git checkout -b "$BRANCH"
+
+ # Add error log
+ mkdir -p .github/workflow-logs
+ cp targets-output.log .github/workflow-logs/failure-$(date +%Y%m%d-%H%M%S).log
+ git add .github/workflow-logs/
+ git commit -m "Add workflow failure log for review" || true
+ git push origin "$BRANCH"
+
+ # Create PR (Copilot will auto-review it)
+ gh pr create \
+ --title "🚨 Targets workflow failed - Review needed" \
+ --body "## Workflow Failure
- - name: update md
- run: |
- webshot::install_phantomjs()
- knitr::knit("README.Rmd")
- shell: Rscript {0}
- - name: Upload latest run
- run: |
- git config --local user.name "GitHub Actions"
- git config --local user.email "actions@github.com"
- rm -r .gitignore .github/workflows
- git lfs track _targets/objects/* #use git LFS to track the targets output (larger files)
- git lfs track data/raw_data/*
- git lfs track data/* #use git LFS to track the data output (larger files)
- git lfs track "raw_data/**" #use git LFS to track raw_data output (larger files)
- git lfs track "data/**"
- git lfs track _targets/metadata/* #track metadata
- git lfs track *.tif
- git add .gitattributes
- git add --all -- ':!renv' ':!*json'
- for file in $(git ls-files ':!*.json' -mo --exclude=renv)
- do
- git add -f $file
- done
- git commit -am "Run pipeline"
- git push origin targets-runs
-# Move the loop below up two lines (after git add) to commit large files.
- - name: Prepare failure artifact
- if: failure()
- run: rm -rf .git .github .targets-files .targets-runs
+ The targets pipeline failed. GitHub Copilot will review this PR.
+
+ ### Error Summary
+ \`\`\`
+ $(cat error-summary.txt)
+ \`\`\`
+
+ ### Full Log
+ See \`.github/workflow-logs/\` for complete output.
+
+ **Next steps:**
+ 1. Review Copilot's suggestions in the PR
+ 2. Apply fixes
+ 3. Close this PR once resolved" \
+ --base main \
+ --head "$BRANCH" \
+ --label "bug"
+
- name: Post failure artifact
if: failure()
uses: actions/upload-artifact@main
with:
- name: ${{ runner.os }}-r${{ matrix.config.r }}-results
+ name: ${{ runner.os }}-results
path: .
+
+ - name: Prepare failure artifact
+ if: failure()
+ run: rm -rf .git .github
+
+ - name: Comment on existing PR with status
+ if: always() && github.event_name == 'pull_request'
+ env:
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ run: |
+ STATUS="${{ steps.targets.outcome }}"
+ if [ "$STATUS" = "success" ]; then
+ EMOJI="✅"
+ MESSAGE="Targets workflow completed successfully!"
+ else
+ EMOJI="❌"
+ MESSAGE="Targets workflow failed. See logs below."
+ fi
+
+ if [ ! -f targets-output.log ]; then
+ echo "No targets-output.log file found. Pipeline completed without explicit log output." > targets-output.log
+ fi
+ gh pr comment ${{ github.event.pull_request.number }} --body "## $EMOJI Targets Workflow Result
+
+ $MESSAGE
+
+
+ Show last 50 lines of output
+
+ \`\`\`
+ $(tail -50 targets-output.log)
+ \`\`\`
+ "
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 889aa851..317eeea2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,53 +1,78 @@
-# History files
+# R session files
.Rhistory
.Rapp.history
-# Session Data files
.RData
-# User-specific files
.Ruserdata
-# Example code in package build process
+
+# RStudio files
+.Rproj.user/
+
+# Targets workflow - track meta/meta for pipeline state
+_targets/objects/
+_targets/user/
+_targets/workspaces/
+_targets/meta/process
+_targets/meta/progress
+
+# Data directories
+data/temp/
+data/other_data/
+data/raw_data/
+data/manual_download/*.gpkg
+data/manual_download/NVM*
+data/raw*
+data/.tar_cache/
+data/target_outputs/
+
+# Terra auxiliary files (from terra_preserve_metadata)
+*.tif.aux.xml
+*.tif.zip
+*.ovr
+
+# Secrets & credentials
+.Renviron
+.httr-oauth
+~/.boxr-oauth
+.secrets
+secrets/
+debugging_auth.R
+
+# JSON files - specific patterns only
+secrets/*.json
+scratch_code/*.json
+
+# AppEEARS/NASA downloads
+*.hdf
+*.h5
+
+# Test scripts
+test_*.R
+
+# R package build
*-Ex.R
-# Output files from R CMD build
/*.tar.gz
-# Output files from R CMD check
/*.Rcheck/
-# RStudio files
-.Rproj.user/
-# produced vignettes
+
+# Vignettes
vignettes/*.html
vignettes/*.pdf
-# OAuth2 token, see https://github.com/hadley/httr/releases/tag/v0.3
-.httr-oauth
-# knitr and R markdown default cache directories
+
+# knitr and R markdown
*_cache/
/cache/
-# Temporary files created by R markdown
*.utf8.md
*.knit.md
-# R Environment Variables
-.Renviron
-# targets related workflow stuff
-~/.boxr-oauth
index.md
-index_files/*
-firemodel_predict
-#raw_data/
+index_files/
+
+# Output/legacy directories
processed_data/
-#data/*
-*.gpkg
-data/other_data/
-*/other_data/*
-.DS_Store
-#*/meta
-img/network.html
+firemodel_predict
+
+# Image outputs
+img/*_files
+img/*.html
img/network*
-scratch_code/*.json
-scratch_code/!*.json.gpg
-.secrets
-secrets
-secrets/
-secrets/*
-secrets/*.json
-secrets/!*.json.gpg
-debugging_auth.R
-*.json
+
+# OS files
+.DS_Store
diff --git a/.targets-files b/.targets-files
new file mode 100644
index 00000000..50cfbbde
--- /dev/null
+++ b/.targets-files
@@ -0,0 +1,2443 @@
+.targets-files
+.targets-runs/
+Rplots.pdf
+_targets/meta/.gitignore
+_targets/meta/meta
+_targets/meta/process
+_targets/meta/progress
+_targets/objects/alos
+_targets/objects/burn_date_to_last_burned_date
+_targets/objects/climate_chelsa
+_targets/objects/clouds_wilson
+_targets/objects/correct_fire_proj
+_targets/objects/correct_kndvi_proj
+_targets/objects/correct_ndvi_date_proj
+_targets/objects/correct_ndvi_proj
+_targets/objects/country
+_targets/objects/data
+_targets/objects/domain
+_targets/objects/elevation_nasadem
+_targets/objects/fire_dates_to_parquet
+_targets/objects/fire_doy_to_unix_date
+_targets/objects/fire_modis
+_targets/objects/group_data
+_targets/objects/kndvi_modis
+_targets/objects/landcover_za
+_targets/objects/model
+_targets/objects/model_fit
+_targets/objects/most_recent_fire_dates_to_parquet
+_targets/objects/ndvi_dates_modis
+_targets/objects/ndvi_modis
+_targets/objects/ndvi_relative_days_since_fire
+_targets/objects/ndvi_to_parquet
+_targets/objects/posterior_summary
+_targets/objects/precipitation_chelsa
+_targets/objects/projected_alos
+_targets/objects/projected_climate_chelsa
+_targets/objects/projected_clouds_wilson
+_targets/objects/projected_elevation_nasadem
+_targets/objects/projected_landcover_za
+_targets/objects/projected_precipitation_chelsa
+_targets/objects/raw_data
+_targets/objects/stan_data
+_targets/objects/template
+_targets/objects/test_tif
+_targets/objects/vegmap
+data/domain.gpkg
+data/model_data.csv
+data/processed_data/alos/alos_chili.tif
+data/processed_data/alos/alos_mtpi.tif
+data/processed_data/alos/alos_topographic_diversity.tif
+data/processed_data/alos/landforms.tif
+data/processed_data/climate_chelsa/CHELSA_bio10_01_V1.2_clipped.tif
+data/processed_data/climate_chelsa/CHELSA_bio10_02_V1.2_clipped.tif
+data/processed_data/climate_chelsa/CHELSA_bio10_03_V1.2_clipped.tif
+data/processed_data/climate_chelsa/CHELSA_bio10_04_V1.2_clipped.tif
+data/processed_data/climate_chelsa/CHELSA_bio10_05_V1.2_clipped.tif
+data/processed_data/climate_chelsa/CHELSA_bio10_06_V1.2_clipped.tif
+data/processed_data/climate_chelsa/CHELSA_bio10_07_V1.2_clipped.tif
+data/processed_data/climate_chelsa/CHELSA_bio10_08_V1.2_clipped.tif
+data/processed_data/climate_chelsa/CHELSA_bio10_09_V1.2_clipped.tif
+data/processed_data/climate_chelsa/CHELSA_bio10_10_V1.2_clipped.tif
+data/processed_data/climate_chelsa/CHELSA_bio10_11_V1.2_clipped.tif
+data/processed_data/climate_chelsa/CHELSA_bio10_12_V1.2_clipped.tif
+data/processed_data/climate_chelsa/CHELSA_bio10_13_V1.2_clipped.tif
+data/processed_data/climate_chelsa/CHELSA_bio10_14_V1.2_clipped.tif
+data/processed_data/climate_chelsa/CHELSA_bio10_15_V1.2_clipped.tif
+data/processed_data/climate_chelsa/CHELSA_bio10_16_V1.2_clipped.tif
+data/processed_data/climate_chelsa/CHELSA_bio10_17_V1.2_clipped.tif
+data/processed_data/climate_chelsa/CHELSA_bio10_18_V1.2_clipped.tif
+data/processed_data/climate_chelsa/CHELSA_bio10_19_V1.2_clipped.tif
+data/processed_data/clouds_wilson/MODCF_interannualSD.tif
+data/processed_data/clouds_wilson/MODCF_intraannualSD.tif
+data/processed_data/clouds_wilson/MODCF_meanannual.tif
+data/processed_data/clouds_wilson/MODCF_monthlymean_01.tif
+data/processed_data/clouds_wilson/MODCF_monthlymean_02.tif
+data/processed_data/clouds_wilson/MODCF_monthlymean_03.tif
+data/processed_data/clouds_wilson/MODCF_monthlymean_04.tif
+data/processed_data/clouds_wilson/MODCF_monthlymean_05.tif
+data/processed_data/clouds_wilson/MODCF_monthlymean_06.tif
+data/processed_data/clouds_wilson/MODCF_monthlymean_07.tif
+data/processed_data/clouds_wilson/MODCF_monthlymean_08.tif
+data/processed_data/clouds_wilson/MODCF_monthlymean_09.tif
+data/processed_data/clouds_wilson/MODCF_monthlymean_10.tif
+data/processed_data/clouds_wilson/MODCF_monthlymean_11.tif
+data/processed_data/clouds_wilson/MODCF_monthlymean_12.tif
+data/processed_data/clouds_wilson/MODCF_seasonality_concentration.tif
+data/processed_data/clouds_wilson/MODCF_seasonality_rgb.tif
+data/processed_data/clouds_wilson/MODCF_seasonality_theta.tif
+data/processed_data/clouds_wilson/MODCF_seasonality_visct.tif
+data/processed_data/clouds_wilson/MODCF_spatialSD_1deg.tif
+data/processed_data/elevation_nasadem/nasadem.tif
+data/processed_data/fire_dates/2000_11_01.tif
+data/processed_data/fire_dates/2000_12_01.tif
+data/processed_data/fire_dates/2001_01_01.tif
+data/processed_data/fire_dates/2001_02_01.tif
+data/processed_data/fire_dates/2001_03_01.tif
+data/processed_data/fire_dates/2001_04_01.tif
+data/processed_data/fire_dates/2001_05_01.tif
+data/processed_data/fire_dates/2001_06_01.tif
+data/processed_data/fire_dates/2001_07_01.tif
+data/processed_data/fire_dates/2001_08_01.tif
+data/processed_data/fire_dates/2001_09_01.tif
+data/processed_data/fire_dates/2001_10_01.tif
+data/processed_data/fire_dates/2001_11_01.tif
+data/processed_data/fire_dates/2001_12_01.tif
+data/processed_data/fire_dates/2002_01_01.tif
+data/processed_data/fire_dates/2002_02_01.tif
+data/processed_data/fire_dates/2002_03_01.tif
+data/processed_data/fire_dates/2002_04_01.tif
+data/processed_data/fire_dates/2002_05_01.tif
+data/processed_data/fire_dates/2002_06_01.tif
+data/processed_data/fire_dates/2002_07_01.tif
+data/processed_data/fire_dates/2002_08_01.tif
+data/processed_data/fire_dates/2002_09_01.tif
+data/processed_data/fire_dates/2002_10_01.tif
+data/processed_data/fire_dates/2002_11_01.tif
+data/processed_data/fire_dates/2002_12_01.tif
+data/processed_data/fire_dates/2003_01_01.tif
+data/processed_data/fire_dates/2003_02_01.tif
+data/processed_data/fire_dates/2003_03_01.tif
+data/processed_data/fire_dates/2003_04_01.tif
+data/processed_data/fire_dates/2003_05_01.tif
+data/processed_data/fire_dates/2003_06_01.tif
+data/processed_data/fire_dates/2003_07_01.tif
+data/processed_data/fire_dates/2003_08_01.tif
+data/processed_data/fire_dates/2003_09_01.tif
+data/processed_data/fire_dates/2003_10_01.tif
+data/processed_data/fire_dates/2003_11_01.tif
+data/processed_data/fire_dates/2003_12_01.tif
+data/processed_data/fire_dates/2004_01_01.tif
+data/processed_data/fire_dates/2004_02_01.tif
+data/processed_data/fire_dates/2004_03_01.tif
+data/processed_data/fire_dates/2004_04_01.tif
+data/processed_data/fire_dates/2004_05_01.tif
+data/processed_data/fire_dates/2004_06_01.tif
+data/processed_data/fire_dates/2004_07_01.tif
+data/processed_data/fire_dates/2004_08_01.tif
+data/processed_data/fire_dates/2004_09_01.tif
+data/processed_data/fire_dates/2004_10_01.tif
+data/processed_data/fire_dates/2004_11_01.tif
+data/processed_data/fire_dates/2004_12_01.tif
+data/processed_data/fire_dates/2005_01_01.tif
+data/processed_data/fire_dates/2005_02_01.tif
+data/processed_data/fire_dates/2005_03_01.tif
+data/processed_data/fire_dates/2005_04_01.tif
+data/processed_data/fire_dates/2005_05_01.tif
+data/processed_data/fire_dates/2005_06_01.tif
+data/processed_data/fire_dates/2005_07_01.tif
+data/processed_data/fire_dates/2005_08_01.tif
+data/processed_data/fire_dates/2005_09_01.tif
+data/processed_data/fire_dates/2005_10_01.tif
+data/processed_data/fire_dates/2005_11_01.tif
+data/processed_data/fire_dates/2005_12_01.tif
+data/processed_data/fire_dates/2006_01_01.tif
+data/processed_data/fire_dates/2006_02_01.tif
+data/processed_data/fire_dates/2006_03_01.tif
+data/processed_data/fire_dates/2006_04_01.tif
+data/processed_data/fire_dates/2006_05_01.tif
+data/processed_data/fire_dates/2006_06_01.tif
+data/processed_data/fire_dates/2006_07_01.tif
+data/processed_data/fire_dates/2006_08_01.tif
+data/processed_data/fire_dates/2006_09_01.tif
+data/processed_data/fire_dates/2006_10_01.tif
+data/processed_data/fire_dates/2006_11_01.tif
+data/processed_data/fire_dates/2006_12_01.tif
+data/processed_data/fire_dates/2007_01_01.tif
+data/processed_data/fire_dates/2007_02_01.tif
+data/processed_data/fire_dates/2007_03_01.tif
+data/processed_data/fire_dates/2007_04_01.tif
+data/processed_data/fire_dates/2007_05_01.tif
+data/processed_data/fire_dates/2007_06_01.tif
+data/processed_data/fire_dates/2007_07_01.tif
+data/processed_data/fire_dates/2007_08_01.tif
+data/processed_data/fire_dates/2007_09_01.tif
+data/processed_data/fire_dates/2007_10_01.tif
+data/processed_data/fire_dates/2007_11_01.tif
+data/processed_data/fire_dates/2007_12_01.tif
+data/processed_data/fire_dates/2008_01_01.tif
+data/processed_data/fire_dates/2008_02_01.tif
+data/processed_data/fire_dates/2008_03_01.tif
+data/processed_data/fire_dates/2008_04_01.tif
+data/processed_data/fire_dates/2008_05_01.tif
+data/processed_data/fire_dates/2008_06_01.tif
+data/processed_data/fire_dates/2008_07_01.tif
+data/processed_data/fire_dates/2008_08_01.tif
+data/processed_data/fire_dates/2008_09_01.tif
+data/processed_data/fire_dates/2008_10_01.tif
+data/processed_data/fire_dates/2008_11_01.tif
+data/processed_data/fire_dates/2008_12_01.tif
+data/processed_data/fire_dates/2009_01_01.tif
+data/processed_data/fire_dates/2009_02_01.tif
+data/processed_data/fire_dates/2009_03_01.tif
+data/processed_data/fire_dates/2009_04_01.tif
+data/processed_data/fire_dates/2009_05_01.tif
+data/processed_data/fire_dates/2009_06_01.tif
+data/processed_data/fire_dates/2009_07_01.tif
+data/processed_data/fire_dates/2009_08_01.tif
+data/processed_data/fire_dates/2009_09_01.tif
+data/processed_data/fire_dates/2009_10_01.tif
+data/processed_data/fire_dates/2009_11_01.tif
+data/processed_data/fire_dates/2009_12_01.tif
+data/processed_data/fire_dates/2010_01_01.tif
+data/processed_data/fire_dates/2010_02_01.tif
+data/processed_data/fire_dates/2010_03_01.tif
+data/processed_data/fire_dates/2010_04_01.tif
+data/processed_data/fire_dates/2010_05_01.tif
+data/processed_data/fire_dates/2010_06_01.tif
+data/processed_data/fire_dates/2010_07_01.tif
+data/processed_data/fire_dates/2010_08_01.tif
+data/processed_data/fire_dates/2010_09_01.tif
+data/processed_data/fire_dates/2010_10_01.tif
+data/processed_data/fire_dates/2010_11_01.tif
+data/processed_data/fire_dates/2010_12_01.tif
+data/processed_data/fire_dates/2011_01_01.tif
+data/processed_data/fire_dates/2011_02_01.tif
+data/processed_data/fire_dates/2011_03_01.tif
+data/processed_data/fire_dates/2011_04_01.tif
+data/processed_data/fire_dates/2011_05_01.tif
+data/processed_data/fire_dates/2011_06_01.tif
+data/processed_data/fire_dates/2011_07_01.tif
+data/processed_data/fire_dates/2011_08_01.tif
+data/processed_data/fire_dates/2011_09_01.tif
+data/processed_data/fire_dates/2011_10_01.tif
+data/processed_data/fire_dates/2011_11_01.tif
+data/processed_data/fire_dates/2011_12_01.tif
+data/processed_data/fire_dates/2012_01_01.tif
+data/processed_data/fire_dates/2012_02_01.tif
+data/processed_data/fire_dates/2012_03_01.tif
+data/processed_data/fire_dates/2012_04_01.tif
+data/processed_data/fire_dates/2012_05_01.tif
+data/processed_data/fire_dates/2012_06_01.tif
+data/processed_data/fire_dates/2012_07_01.tif
+data/processed_data/fire_dates/2012_08_01.tif
+data/processed_data/fire_dates/2012_09_01.tif
+data/processed_data/fire_dates/2012_10_01.tif
+data/processed_data/fire_dates/2012_11_01.tif
+data/processed_data/fire_dates/2012_12_01.tif
+data/processed_data/fire_dates/2013_01_01.tif
+data/processed_data/fire_dates/2013_02_01.tif
+data/processed_data/fire_dates/2013_03_01.tif
+data/processed_data/fire_dates/2013_04_01.tif
+data/processed_data/fire_dates/2013_05_01.tif
+data/processed_data/fire_dates/2013_06_01.tif
+data/processed_data/fire_dates/2013_07_01.tif
+data/processed_data/fire_dates/2013_08_01.tif
+data/processed_data/fire_dates/2013_09_01.tif
+data/processed_data/fire_dates/2013_10_01.tif
+data/processed_data/fire_dates/2013_11_01.tif
+data/processed_data/fire_dates/2013_12_01.tif
+data/processed_data/fire_dates/2014_01_01.tif
+data/processed_data/fire_dates/2014_02_01.tif
+data/processed_data/fire_dates/2014_03_01.tif
+data/processed_data/fire_dates/2014_04_01.tif
+data/processed_data/fire_dates/2014_05_01.tif
+data/processed_data/fire_dates/2014_06_01.tif
+data/processed_data/fire_dates/2014_07_01.tif
+data/processed_data/fire_dates/2014_08_01.tif
+data/processed_data/fire_dates/2014_09_01.tif
+data/processed_data/fire_dates/2014_10_01.tif
+data/processed_data/fire_dates/2014_11_01.tif
+data/processed_data/fire_dates/2014_12_01.tif
+data/processed_data/fire_dates/2015_01_01.tif
+data/processed_data/fire_dates/2015_02_01.tif
+data/processed_data/fire_dates/2015_03_01.tif
+data/processed_data/fire_dates/2015_04_01.tif
+data/processed_data/fire_dates/2015_05_01.tif
+data/processed_data/fire_dates/2015_06_01.tif
+data/processed_data/fire_dates/2015_07_01.tif
+data/processed_data/fire_dates/2015_08_01.tif
+data/processed_data/fire_dates/2015_09_01.tif
+data/processed_data/fire_dates/2015_10_01.tif
+data/processed_data/fire_dates/2015_11_01.tif
+data/processed_data/fire_dates/2015_12_01.tif
+data/processed_data/fire_dates/2016_01_01.tif
+data/processed_data/fire_dates/2016_02_01.tif
+data/processed_data/fire_dates/2016_03_01.tif
+data/processed_data/fire_dates/2016_04_01.tif
+data/processed_data/fire_dates/2016_05_01.tif
+data/processed_data/fire_dates/2016_06_01.tif
+data/processed_data/fire_dates/2016_07_01.tif
+data/processed_data/fire_dates/2016_08_01.tif
+data/processed_data/fire_dates/2016_09_01.tif
+data/processed_data/fire_dates/2016_10_01.tif
+data/processed_data/fire_dates/2016_11_01.tif
+data/processed_data/fire_dates/2016_12_01.tif
+data/processed_data/fire_dates/2017_01_01.tif
+data/processed_data/fire_dates/2017_02_01.tif
+data/processed_data/fire_dates/2017_03_01.tif
+data/processed_data/fire_dates/2017_04_01.tif
+data/processed_data/fire_dates/2017_05_01.tif
+data/processed_data/fire_dates/2017_06_01.tif
+data/processed_data/fire_dates/2017_07_01.tif
+data/processed_data/fire_dates/2017_08_01.tif
+data/processed_data/fire_dates/2017_09_01.tif
+data/processed_data/fire_dates/2017_10_01.tif
+data/processed_data/fire_dates/2017_11_01.tif
+data/processed_data/fire_dates/2017_12_01.tif
+data/processed_data/fire_dates/2018_01_01.tif
+data/processed_data/fire_dates/2018_02_01.tif
+data/processed_data/fire_dates/2018_03_01.tif
+data/processed_data/fire_dates/2018_04_01.tif
+data/processed_data/fire_dates/2018_05_01.tif
+data/processed_data/fire_dates/2018_06_01.tif
+data/processed_data/fire_dates/2018_07_01.tif
+data/processed_data/fire_dates/2018_08_01.tif
+data/processed_data/fire_dates/2018_09_01.tif
+data/processed_data/fire_dates/2018_10_01.tif
+data/processed_data/fire_dates/2018_11_01.tif
+data/processed_data/fire_dates/2018_12_01.tif
+data/processed_data/fire_dates/2019_01_01.tif
+data/processed_data/fire_dates/2019_02_01.tif
+data/processed_data/fire_dates/2019_03_01.tif
+data/processed_data/fire_dates/2019_04_01.tif
+data/processed_data/fire_dates/2019_05_01.tif
+data/processed_data/fire_dates/2019_06_01.tif
+data/processed_data/fire_dates/2019_07_01.tif
+data/processed_data/fire_dates/2019_08_01.tif
+data/processed_data/fire_dates/2019_09_01.tif
+data/processed_data/fire_dates/2019_10_01.tif
+data/processed_data/fire_dates/2019_11_01.tif
+data/processed_data/fire_dates/2019_12_01.tif
+data/processed_data/fire_dates/2020_01_01.tif
+data/processed_data/fire_dates/2020_02_01.tif
+data/processed_data/fire_dates/2020_03_01.tif
+data/processed_data/fire_dates/2020_04_01.tif
+data/processed_data/fire_dates/2020_05_01.tif
+data/processed_data/fire_dates/2020_06_01.tif
+data/processed_data/fire_dates/2020_07_01.tif
+data/processed_data/fire_dates/2020_08_01.tif
+data/processed_data/fire_dates/2020_09_01.tif
+data/processed_data/fire_dates/2020_10_01.tif
+data/processed_data/fire_dates/2020_11_01.tif
+data/processed_data/fire_dates/2020_12_01.tif
+data/processed_data/fire_dates/2021_01_01.tif
+data/processed_data/fire_dates/2021_02_01.tif
+data/processed_data/fire_dates/2021_03_01.tif
+data/processed_data/fire_dates/2021_04_01.tif
+data/processed_data/fire_dates/2021_05_01.tif
+data/processed_data/fire_dates/2021_06_01.tif
+data/processed_data/fire_dates/2021_07_01.tif
+data/processed_data/fire_dates/2021_08_01.tif
+data/processed_data/fire_dates/2021_09_01.tif
+data/processed_data/fire_dates/2021_10_01.tif
+data/processed_data/fire_dates/2021_11_01.tif
+data/processed_data/fire_dates/2021_12_01.tif
+data/processed_data/landcover_za/SA_NLC_2020_GEO.tif
+data/processed_data/landcover_za/SA_NLC_2020_GEO.tif.vat.cpg
+data/processed_data/landcover_za/SA_NLC_2020_GEO.tif.vat.dbf
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/11262.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/11292.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/11323.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/11354.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/11382.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/11413.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/11443.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/11474.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/11504.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/11535.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/11566.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/11596.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/11627.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/11657.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/11688.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/11719.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/11747.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/11778.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/11808.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/11839.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/11869.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/11900.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/11931.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/11961.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/11992.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/12022.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/12053.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/12084.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/12112.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/12143.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/12173.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/12204.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/12234.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/12265.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/12296.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/12326.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/12357.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/12387.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/12418.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/12449.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/12478.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/12509.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/12539.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/12570.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/12600.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/12631.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/12662.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/12692.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/12723.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/12753.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/12784.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/12815.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/12843.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/12874.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/12904.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/12935.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/12965.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/12996.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/13027.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/13057.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/13088.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/13118.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/13149.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/13180.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/13208.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/13239.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/13269.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/13300.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/13330.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/13361.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/13392.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/13422.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/13453.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/13483.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/13514.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/13545.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/13573.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/13604.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/13634.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/13665.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/13695.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/13726.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/13757.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/13787.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/13818.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/13848.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/13879.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/13910.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/13939.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/13970.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/14000.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/14031.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/14061.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/14092.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/14123.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/14153.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/14184.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/14214.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/14245.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/14276.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/14304.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/14335.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/14365.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/14396.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/14426.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/14457.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/14488.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/14518.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/14549.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/14579.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/14610.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/14641.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/14669.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/14700.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/14730.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/14761.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/14791.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/14822.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/14853.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/14883.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/14914.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/14944.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/14975.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/15006.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/15034.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/15065.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/15095.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/15126.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/15156.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/15187.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/15218.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/15248.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/15279.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/15309.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/15340.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/15371.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/15400.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/15431.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/15461.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/15492.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/15522.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/15553.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/15584.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/15614.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/15645.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/15675.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/15706.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/15737.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/15765.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/15796.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/15826.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/15857.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/15887.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/15918.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/15949.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/15979.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/16010.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/16040.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/16071.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/16102.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/16130.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/16161.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/16191.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/16222.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/16252.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/16283.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/16314.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/16344.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/16375.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/16405.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/16436.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/16467.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/16495.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/16526.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/16556.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/16587.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/16617.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/16648.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/16679.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/16709.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/16740.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/16770.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/16801.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/16832.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/16861.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/16892.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/16922.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/16953.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/16983.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/17014.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/17045.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/17075.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/17106.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/17136.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/17167.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/17198.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/17226.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/17257.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/17287.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/17318.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/17348.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/17379.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/17410.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/17440.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/17471.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/17501.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/17532.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/17563.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/17591.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/17622.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/17652.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/17683.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/17713.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/17744.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/17775.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/17805.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/17836.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/17866.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/17897.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/17928.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/17956.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/17987.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/18017.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/18048.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/18078.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/18109.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/18140.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/18170.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/18201.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/18231.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/18262.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/18293.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/18322.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/18353.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/18383.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/18414.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/18444.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/18475.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/18506.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/18536.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/18567.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/18597.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/18628.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/18659.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/18687.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/18718.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/18748.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/18779.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/18809.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/18840.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/18871.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/18901.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/18932.gz.parquet
+data/processed_data/model_data/dynamic_parquet/most_recent_burn_dates/18962.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11005.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11021.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11037.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11053.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11069.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11085.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11101.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11117.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11133.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11149.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11165.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11181.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11197.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11213.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11229.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11245.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11261.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11277.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11293.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11309.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11323.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11339.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11355.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11371.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11387.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11403.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11419.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11435.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11451.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11467.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11483.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11499.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11515.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11531.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11547.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11563.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11579.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11595.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11611.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11627.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11643.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11659.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11675.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11688.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11704.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11720.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11736.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11752.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11768.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11784.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11800.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11816.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11832.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11848.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11864.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11880.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11896.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11912.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11928.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11944.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11960.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11976.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/11992.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12008.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12024.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12040.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12053.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12069.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12085.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12101.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12117.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12133.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12149.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12165.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12181.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12197.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12213.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12229.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12245.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12261.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12277.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12293.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12309.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12325.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12341.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12357.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12373.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12389.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12405.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12418.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12434.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12450.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12466.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12482.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12498.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12514.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12530.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12546.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12562.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12578.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12594.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12610.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12626.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12642.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12658.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12674.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12690.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12706.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12722.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12738.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12754.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12770.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12784.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12800.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12816.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12832.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12848.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12864.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12880.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12896.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12912.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12928.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12944.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12960.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12976.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/12992.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13008.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13024.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13040.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13056.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13072.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13088.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13104.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13120.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13136.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13149.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13165.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13181.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13197.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13213.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13229.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13245.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13261.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13277.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13293.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13309.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13325.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13341.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13357.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13373.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13389.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13405.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13421.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13437.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13453.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13469.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13485.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13501.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13514.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13530.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13546.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13562.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13578.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13594.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13610.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13626.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13642.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13658.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13674.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13690.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13706.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13722.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13738.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13754.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13770.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13786.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13802.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13818.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13834.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13850.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13866.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13879.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13895.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13911.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13927.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13943.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13959.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13975.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/13991.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14007.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14023.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14039.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14055.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14071.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14087.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14103.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14119.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14135.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14151.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14167.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14183.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14199.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14215.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14231.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14245.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14261.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14277.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14293.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14309.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14325.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14341.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14357.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14373.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14389.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14405.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14421.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14437.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14453.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14469.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14485.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14501.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14517.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14533.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14549.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14565.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14581.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14597.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14610.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14626.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14642.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14658.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14674.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14690.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14706.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14722.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14738.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14754.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14770.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14786.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14802.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14818.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14834.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14850.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14866.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14882.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14898.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14914.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14930.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14946.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14962.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14975.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/14991.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15007.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15023.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15039.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15055.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15071.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15087.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15103.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15119.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15135.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15151.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15167.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15183.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15199.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15215.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15231.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15247.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15263.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15279.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15295.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15311.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15327.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15340.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15356.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15372.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15388.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15404.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15420.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15436.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15452.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15468.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15484.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15500.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15516.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15532.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15548.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15564.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15580.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15596.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15612.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15628.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15644.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15660.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15676.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15692.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15706.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15722.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15738.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15754.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15770.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15786.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15802.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15818.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15834.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15850.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15866.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15882.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15898.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15914.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15930.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15946.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15962.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15978.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/15994.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16010.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16026.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16042.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16058.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16071.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16087.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16103.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16119.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16135.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16151.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16167.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16183.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16199.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16215.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16231.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16247.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16263.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16279.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16295.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16311.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16327.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16343.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16359.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16375.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16391.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16407.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16423.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16436.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16452.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16468.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16484.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16500.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16516.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16532.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16548.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16564.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16580.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16596.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16612.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16628.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16644.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16660.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16676.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16692.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16708.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16724.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16740.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16756.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16772.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16788.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16801.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16817.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16833.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16849.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16865.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16881.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16897.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16913.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16929.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16945.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16961.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16977.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/16993.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17009.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17025.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17041.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17057.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17073.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17089.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17105.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17121.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17137.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17153.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17167.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17183.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17199.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17215.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17231.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17247.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17263.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17279.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17295.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17311.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17327.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17343.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17359.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17375.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17391.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17407.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17423.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17439.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17455.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17471.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17487.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17503.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17519.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17532.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17548.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17564.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17580.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17596.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17612.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17628.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17644.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17660.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17676.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17692.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17708.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17724.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17740.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17756.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17772.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17788.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17804.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17820.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17836.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17852.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17868.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17884.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17897.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17913.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17929.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17945.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17961.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17977.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/17993.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18009.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18025.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18041.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18057.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18073.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18089.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18105.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18121.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18137.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18153.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18169.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18185.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18201.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18217.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18233.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18249.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18262.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18278.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18294.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18310.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18326.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18342.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18358.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18374.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18390.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18406.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18422.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18438.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18454.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18470.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18486.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18502.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18518.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18534.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18550.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18566.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18582.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18598.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18614.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18628.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18644.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18660.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18676.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18692.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18708.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18724.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18740.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18756.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18772.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18788.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18804.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18820.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18836.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18852.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18868.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18884.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18900.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18916.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18932.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18948.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18964.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18980.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/18993.gz.parquet
+data/processed_data/model_data/dynamic_parquet/ndvi/19009.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11005.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11021.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11037.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11053.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11069.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11085.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11101.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11117.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11133.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11149.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11165.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11181.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11197.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11213.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11229.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11245.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11261.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11277.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11293.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11309.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11323.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11339.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11355.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11371.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11387.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11403.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11419.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11435.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11451.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11467.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11483.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11499.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11515.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11531.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11547.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11563.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11579.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11595.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11611.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11627.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11643.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11659.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11675.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11688.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11704.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11720.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11736.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11752.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11768.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11784.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11800.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11816.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11832.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11848.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11864.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11880.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11896.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11912.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11928.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11944.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11960.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11976.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/11992.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12008.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12024.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12040.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12053.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12069.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12085.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12101.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12117.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12133.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12149.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12165.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12181.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12197.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12213.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12229.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12245.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12261.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12277.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12293.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12309.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12325.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12341.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12357.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12373.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12389.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12405.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12418.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12434.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12450.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12466.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12482.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12498.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12514.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12530.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12546.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12562.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12578.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12594.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12610.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12626.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12642.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12658.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12674.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12690.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12706.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12722.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12738.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12754.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12770.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12784.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12800.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12816.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12832.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12848.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12864.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12880.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12896.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12912.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12928.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12944.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12960.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12976.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/12992.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13008.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13024.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13040.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13056.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13072.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13088.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13104.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13120.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13136.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13149.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13165.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13181.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13197.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13213.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13229.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13245.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13261.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13277.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13293.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13309.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13325.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13341.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13357.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13373.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13389.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13405.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13421.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13437.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13453.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13469.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13485.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13501.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13514.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13530.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13546.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13562.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13578.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13594.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13610.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13626.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13642.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13658.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13674.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13690.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13706.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13722.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13738.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13754.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13770.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13786.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13802.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13818.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13834.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13850.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13866.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13879.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13895.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13911.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13927.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13943.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13959.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13975.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/13991.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14007.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14023.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14039.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14055.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14071.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14087.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14103.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14119.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14135.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14151.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14167.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14183.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14199.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14215.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14231.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14245.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14261.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14277.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14293.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14309.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14325.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14341.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14357.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14373.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14389.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14405.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14421.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14437.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14453.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14469.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14485.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14501.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14517.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14533.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14549.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14565.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14581.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14597.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14610.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14626.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14642.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14658.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14674.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14690.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14706.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14722.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14738.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14754.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14770.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14786.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14802.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14818.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14834.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14850.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14866.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14882.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14898.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14914.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14930.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14946.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14962.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14975.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/14991.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15007.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15023.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15039.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15055.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15071.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15087.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15103.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15119.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15135.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15151.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15167.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15183.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15199.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15215.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15231.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15247.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15263.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15279.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15295.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15311.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15327.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15340.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15356.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15372.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15388.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15404.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15420.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15436.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15452.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15468.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15484.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15500.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15516.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15532.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15548.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15564.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15580.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15596.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15612.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15628.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15644.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15660.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15676.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15692.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15706.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15722.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15738.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15754.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15770.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15786.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15802.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15818.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15834.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15850.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15866.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15882.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15898.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15914.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15930.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15946.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15962.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15978.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/15994.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16010.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16026.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16042.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16058.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16071.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16087.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16103.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16119.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16135.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16151.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16167.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16183.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16199.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16215.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16231.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16247.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16263.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16279.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16295.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16311.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16327.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16343.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16359.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16375.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16391.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16407.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16423.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16436.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16452.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16468.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16484.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16500.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16516.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16532.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16548.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16564.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16580.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16596.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16612.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16628.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16644.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16660.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16676.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16692.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16708.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16724.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16740.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16756.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16772.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16788.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16801.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16817.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16833.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16849.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16865.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16881.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16897.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16913.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16929.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16945.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16961.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16977.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/16993.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17009.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17025.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17041.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17057.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17073.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17089.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17105.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17121.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17137.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17153.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17167.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17183.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17199.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17215.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17231.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17247.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17263.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17279.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17295.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17311.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17327.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17343.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17359.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17375.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17391.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17407.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17423.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17439.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17455.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17471.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17487.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17503.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17519.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17532.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17548.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17564.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17580.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17596.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17612.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17628.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17644.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17660.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17676.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17692.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17708.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17724.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17740.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17756.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17772.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17788.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17804.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17820.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17836.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17852.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17868.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17884.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17897.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17913.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17929.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17945.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17961.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17977.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/17993.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18009.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18025.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18041.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18057.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18073.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18089.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18105.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18121.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18137.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18153.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18169.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18185.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18201.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18217.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18233.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18249.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18262.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18278.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18294.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18310.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18326.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18342.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18358.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18374.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18390.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18406.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18422.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18438.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18454.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18470.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18486.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18502.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18518.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18534.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18550.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18566.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18582.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18598.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18614.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18628.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18644.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18660.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18676.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18692.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18708.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18724.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18740.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18756.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18772.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18788.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18804.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18820.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18836.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18852.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18868.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18884.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18900.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18916.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18932.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18948.gz.parquet
+data/processed_data/model_data/dynamic_parquet/time_since_fire/18964.gz.parquet
+data/processed_data/model_data/stable_data.gz.parquet
+data/processed_data/most_recent_burn_dates/2000_11_01.tif
+data/processed_data/most_recent_burn_dates/2000_12_01.tif
+data/processed_data/most_recent_burn_dates/2001_01_01.tif
+data/processed_data/most_recent_burn_dates/2001_02_01.tif
+data/processed_data/most_recent_burn_dates/2001_03_01.tif
+data/processed_data/most_recent_burn_dates/2001_04_01.tif
+data/processed_data/most_recent_burn_dates/2001_05_01.tif
+data/processed_data/most_recent_burn_dates/2001_06_01.tif
+data/processed_data/most_recent_burn_dates/2001_07_01.tif
+data/processed_data/most_recent_burn_dates/2001_08_01.tif
+data/processed_data/most_recent_burn_dates/2001_09_01.tif
+data/processed_data/most_recent_burn_dates/2001_10_01.tif
+data/processed_data/most_recent_burn_dates/2001_11_01.tif
+data/processed_data/most_recent_burn_dates/2001_12_01.tif
+data/processed_data/most_recent_burn_dates/2002_01_01.tif
+data/processed_data/most_recent_burn_dates/2002_02_01.tif
+data/processed_data/most_recent_burn_dates/2002_03_01.tif
+data/processed_data/most_recent_burn_dates/2002_04_01.tif
+data/processed_data/most_recent_burn_dates/2002_05_01.tif
+data/processed_data/most_recent_burn_dates/2002_06_01.tif
+data/processed_data/most_recent_burn_dates/2002_07_01.tif
+data/processed_data/most_recent_burn_dates/2002_08_01.tif
+data/processed_data/most_recent_burn_dates/2002_09_01.tif
+data/processed_data/most_recent_burn_dates/2002_10_01.tif
+data/processed_data/most_recent_burn_dates/2002_11_01.tif
+data/processed_data/most_recent_burn_dates/2002_12_01.tif
+data/processed_data/most_recent_burn_dates/2003_01_01.tif
+data/processed_data/most_recent_burn_dates/2003_02_01.tif
+data/processed_data/most_recent_burn_dates/2003_03_01.tif
+data/processed_data/most_recent_burn_dates/2003_04_01.tif
+data/processed_data/most_recent_burn_dates/2003_05_01.tif
+data/processed_data/most_recent_burn_dates/2003_06_01.tif
+data/processed_data/most_recent_burn_dates/2003_07_01.tif
+data/processed_data/most_recent_burn_dates/2003_08_01.tif
+data/processed_data/most_recent_burn_dates/2003_09_01.tif
+data/processed_data/most_recent_burn_dates/2003_10_01.tif
+data/processed_data/most_recent_burn_dates/2003_11_01.tif
+data/processed_data/most_recent_burn_dates/2003_12_01.tif
+data/processed_data/most_recent_burn_dates/2004_01_01.tif
+data/processed_data/most_recent_burn_dates/2004_02_01.tif
+data/processed_data/most_recent_burn_dates/2004_03_01.tif
+data/processed_data/most_recent_burn_dates/2004_04_01.tif
+data/processed_data/most_recent_burn_dates/2004_05_01.tif
+data/processed_data/most_recent_burn_dates/2004_06_01.tif
+data/processed_data/most_recent_burn_dates/2004_07_01.tif
+data/processed_data/most_recent_burn_dates/2004_08_01.tif
+data/processed_data/most_recent_burn_dates/2004_09_01.tif
+data/processed_data/most_recent_burn_dates/2004_10_01.tif
+data/processed_data/most_recent_burn_dates/2004_11_01.tif
+data/processed_data/most_recent_burn_dates/2004_12_01.tif
+data/processed_data/most_recent_burn_dates/2005_01_01.tif
+data/processed_data/most_recent_burn_dates/2005_02_01.tif
+data/processed_data/most_recent_burn_dates/2005_03_01.tif
+data/processed_data/most_recent_burn_dates/2005_04_01.tif
+data/processed_data/most_recent_burn_dates/2005_05_01.tif
+data/processed_data/most_recent_burn_dates/2005_06_01.tif
+data/processed_data/most_recent_burn_dates/2005_07_01.tif
+data/processed_data/most_recent_burn_dates/2005_08_01.tif
+data/processed_data/most_recent_burn_dates/2005_09_01.tif
+data/processed_data/most_recent_burn_dates/2005_10_01.tif
+data/processed_data/most_recent_burn_dates/2005_11_01.tif
+data/processed_data/most_recent_burn_dates/2005_12_01.tif
+data/processed_data/most_recent_burn_dates/2006_01_01.tif
+data/processed_data/most_recent_burn_dates/2006_02_01.tif
+data/processed_data/most_recent_burn_dates/2006_03_01.tif
+data/processed_data/most_recent_burn_dates/2006_04_01.tif
+data/processed_data/most_recent_burn_dates/2006_05_01.tif
+data/processed_data/most_recent_burn_dates/2006_06_01.tif
+data/processed_data/most_recent_burn_dates/2006_07_01.tif
+data/processed_data/most_recent_burn_dates/2006_08_01.tif
+data/processed_data/most_recent_burn_dates/2006_09_01.tif
+data/processed_data/most_recent_burn_dates/2006_10_01.tif
+data/processed_data/most_recent_burn_dates/2006_11_01.tif
+data/processed_data/most_recent_burn_dates/2006_12_01.tif
+data/processed_data/most_recent_burn_dates/2007_01_01.tif
+data/processed_data/most_recent_burn_dates/2007_02_01.tif
+data/processed_data/most_recent_burn_dates/2007_03_01.tif
+data/processed_data/most_recent_burn_dates/2007_04_01.tif
+data/processed_data/most_recent_burn_dates/2007_05_01.tif
+data/processed_data/most_recent_burn_dates/2007_06_01.tif
+data/processed_data/most_recent_burn_dates/2007_07_01.tif
+data/processed_data/most_recent_burn_dates/2007_08_01.tif
+data/processed_data/most_recent_burn_dates/2007_09_01.tif
+data/processed_data/most_recent_burn_dates/2007_10_01.tif
+data/processed_data/most_recent_burn_dates/2007_11_01.tif
+data/processed_data/most_recent_burn_dates/2007_12_01.tif
+data/processed_data/most_recent_burn_dates/2008_01_01.tif
+data/processed_data/most_recent_burn_dates/2008_02_01.tif
+data/processed_data/most_recent_burn_dates/2008_03_01.tif
+data/processed_data/most_recent_burn_dates/2008_04_01.tif
+data/processed_data/most_recent_burn_dates/2008_05_01.tif
+data/processed_data/most_recent_burn_dates/2008_06_01.tif
+data/processed_data/most_recent_burn_dates/2008_07_01.tif
+data/processed_data/most_recent_burn_dates/2008_08_01.tif
+data/processed_data/most_recent_burn_dates/2008_09_01.tif
+data/processed_data/most_recent_burn_dates/2008_10_01.tif
+data/processed_data/most_recent_burn_dates/2008_11_01.tif
+data/processed_data/most_recent_burn_dates/2008_12_01.tif
+data/processed_data/most_recent_burn_dates/2009_01_01.tif
+data/processed_data/most_recent_burn_dates/2009_02_01.tif
+data/processed_data/most_recent_burn_dates/2009_03_01.tif
+data/processed_data/most_recent_burn_dates/2009_04_01.tif
+data/processed_data/most_recent_burn_dates/2009_05_01.tif
+data/processed_data/most_recent_burn_dates/2009_06_01.tif
+data/processed_data/most_recent_burn_dates/2009_07_01.tif
+data/processed_data/most_recent_burn_dates/2009_08_01.tif
+data/processed_data/most_recent_burn_dates/2009_09_01.tif
+data/processed_data/most_recent_burn_dates/2009_10_01.tif
+data/processed_data/most_recent_burn_dates/2009_11_01.tif
+data/processed_data/most_recent_burn_dates/2009_12_01.tif
+data/processed_data/most_recent_burn_dates/2010_01_01.tif
+data/processed_data/most_recent_burn_dates/2010_02_01.tif
+data/processed_data/most_recent_burn_dates/2010_03_01.tif
+data/processed_data/most_recent_burn_dates/2010_04_01.tif
+data/processed_data/most_recent_burn_dates/2010_05_01.tif
+data/processed_data/most_recent_burn_dates/2010_06_01.tif
+data/processed_data/most_recent_burn_dates/2010_07_01.tif
+data/processed_data/most_recent_burn_dates/2010_08_01.tif
+data/processed_data/most_recent_burn_dates/2010_09_01.tif
+data/processed_data/most_recent_burn_dates/2010_10_01.tif
+data/processed_data/most_recent_burn_dates/2010_11_01.tif
+data/processed_data/most_recent_burn_dates/2010_12_01.tif
+data/processed_data/most_recent_burn_dates/2011_01_01.tif
+data/processed_data/most_recent_burn_dates/2011_02_01.tif
+data/processed_data/most_recent_burn_dates/2011_03_01.tif
+data/processed_data/most_recent_burn_dates/2011_04_01.tif
+data/processed_data/most_recent_burn_dates/2011_05_01.tif
+data/processed_data/most_recent_burn_dates/2011_06_01.tif
+data/processed_data/most_recent_burn_dates/2011_07_01.tif
+data/processed_data/most_recent_burn_dates/2011_08_01.tif
+data/processed_data/most_recent_burn_dates/2011_09_01.tif
+data/processed_data/most_recent_burn_dates/2011_10_01.tif
+data/processed_data/most_recent_burn_dates/2011_11_01.tif
+data/processed_data/most_recent_burn_dates/2011_12_01.tif
+data/processed_data/most_recent_burn_dates/2012_01_01.tif
+data/processed_data/most_recent_burn_dates/2012_02_01.tif
+data/processed_data/most_recent_burn_dates/2012_03_01.tif
+data/processed_data/most_recent_burn_dates/2012_04_01.tif
+data/processed_data/most_recent_burn_dates/2012_05_01.tif
+data/processed_data/most_recent_burn_dates/2012_06_01.tif
+data/processed_data/most_recent_burn_dates/2012_07_01.tif
+data/processed_data/most_recent_burn_dates/2012_08_01.tif
+data/processed_data/most_recent_burn_dates/2012_09_01.tif
+data/processed_data/most_recent_burn_dates/2012_10_01.tif
+data/processed_data/most_recent_burn_dates/2012_11_01.tif
+data/processed_data/most_recent_burn_dates/2012_12_01.tif
+data/processed_data/most_recent_burn_dates/2013_01_01.tif
+data/processed_data/most_recent_burn_dates/2013_02_01.tif
+data/processed_data/most_recent_burn_dates/2013_03_01.tif
+data/processed_data/most_recent_burn_dates/2013_04_01.tif
+data/processed_data/most_recent_burn_dates/2013_05_01.tif
+data/processed_data/most_recent_burn_dates/2013_06_01.tif
+data/processed_data/most_recent_burn_dates/2013_07_01.tif
+data/processed_data/most_recent_burn_dates/2013_08_01.tif
+data/processed_data/most_recent_burn_dates/2013_09_01.tif
+data/processed_data/most_recent_burn_dates/2013_10_01.tif
+data/processed_data/most_recent_burn_dates/2013_11_01.tif
+data/processed_data/most_recent_burn_dates/2013_12_01.tif
+data/processed_data/most_recent_burn_dates/2014_01_01.tif
+data/processed_data/most_recent_burn_dates/2014_02_01.tif
+data/processed_data/most_recent_burn_dates/2014_03_01.tif
+data/processed_data/most_recent_burn_dates/2014_04_01.tif
+data/processed_data/most_recent_burn_dates/2014_05_01.tif
+data/processed_data/most_recent_burn_dates/2014_06_01.tif
+data/processed_data/most_recent_burn_dates/2014_07_01.tif
+data/processed_data/most_recent_burn_dates/2014_08_01.tif
+data/processed_data/most_recent_burn_dates/2014_09_01.tif
+data/processed_data/most_recent_burn_dates/2014_10_01.tif
+data/processed_data/most_recent_burn_dates/2014_11_01.tif
+data/processed_data/most_recent_burn_dates/2014_12_01.tif
+data/processed_data/most_recent_burn_dates/2015_01_01.tif
+data/processed_data/most_recent_burn_dates/2015_02_01.tif
+data/processed_data/most_recent_burn_dates/2015_03_01.tif
+data/processed_data/most_recent_burn_dates/2015_04_01.tif
+data/processed_data/most_recent_burn_dates/2015_05_01.tif
+data/processed_data/most_recent_burn_dates/2015_06_01.tif
+data/processed_data/most_recent_burn_dates/2015_07_01.tif
+data/processed_data/most_recent_burn_dates/2015_08_01.tif
+data/processed_data/most_recent_burn_dates/2015_09_01.tif
+data/processed_data/most_recent_burn_dates/2015_10_01.tif
+data/processed_data/most_recent_burn_dates/2015_11_01.tif
+data/processed_data/most_recent_burn_dates/2015_12_01.tif
+data/processed_data/most_recent_burn_dates/2016_01_01.tif
+data/processed_data/most_recent_burn_dates/2016_02_01.tif
+data/processed_data/most_recent_burn_dates/2016_03_01.tif
+data/processed_data/most_recent_burn_dates/2016_04_01.tif
+data/processed_data/most_recent_burn_dates/2016_05_01.tif
+data/processed_data/most_recent_burn_dates/2016_06_01.tif
+data/processed_data/most_recent_burn_dates/2016_07_01.tif
+data/processed_data/most_recent_burn_dates/2016_08_01.tif
+data/processed_data/most_recent_burn_dates/2016_09_01.tif
+data/processed_data/most_recent_burn_dates/2016_10_01.tif
+data/processed_data/most_recent_burn_dates/2016_11_01.tif
+data/processed_data/most_recent_burn_dates/2016_12_01.tif
+data/processed_data/most_recent_burn_dates/2017_01_01.tif
+data/processed_data/most_recent_burn_dates/2017_02_01.tif
+data/processed_data/most_recent_burn_dates/2017_03_01.tif
+data/processed_data/most_recent_burn_dates/2017_04_01.tif
+data/processed_data/most_recent_burn_dates/2017_05_01.tif
+data/processed_data/most_recent_burn_dates/2017_06_01.tif
+data/processed_data/most_recent_burn_dates/2017_07_01.tif
+data/processed_data/most_recent_burn_dates/2017_08_01.tif
+data/processed_data/most_recent_burn_dates/2017_09_01.tif
+data/processed_data/most_recent_burn_dates/2017_10_01.tif
+data/processed_data/most_recent_burn_dates/2017_11_01.tif
+data/processed_data/most_recent_burn_dates/2017_12_01.tif
+data/processed_data/most_recent_burn_dates/2018_01_01.tif
+data/processed_data/most_recent_burn_dates/2018_02_01.tif
+data/processed_data/most_recent_burn_dates/2018_03_01.tif
+data/processed_data/most_recent_burn_dates/2018_04_01.tif
+data/processed_data/most_recent_burn_dates/2018_05_01.tif
+data/processed_data/most_recent_burn_dates/2018_06_01.tif
+data/processed_data/most_recent_burn_dates/2018_07_01.tif
+data/processed_data/most_recent_burn_dates/2018_08_01.tif
+data/processed_data/most_recent_burn_dates/2018_09_01.tif
+data/processed_data/most_recent_burn_dates/2018_10_01.tif
+data/processed_data/most_recent_burn_dates/2018_11_01.tif
+data/processed_data/most_recent_burn_dates/2018_12_01.tif
+data/processed_data/most_recent_burn_dates/2019_01_01.tif
+data/processed_data/most_recent_burn_dates/2019_02_01.tif
+data/processed_data/most_recent_burn_dates/2019_03_01.tif
+data/processed_data/most_recent_burn_dates/2019_04_01.tif
+data/processed_data/most_recent_burn_dates/2019_05_01.tif
+data/processed_data/most_recent_burn_dates/2019_06_01.tif
+data/processed_data/most_recent_burn_dates/2019_07_01.tif
+data/processed_data/most_recent_burn_dates/2019_08_01.tif
+data/processed_data/most_recent_burn_dates/2019_09_01.tif
+data/processed_data/most_recent_burn_dates/2019_10_01.tif
+data/processed_data/most_recent_burn_dates/2019_11_01.tif
+data/processed_data/most_recent_burn_dates/2019_12_01.tif
+data/processed_data/most_recent_burn_dates/2020_01_01.tif
+data/processed_data/most_recent_burn_dates/2020_02_01.tif
+data/processed_data/most_recent_burn_dates/2020_03_01.tif
+data/processed_data/most_recent_burn_dates/2020_04_01.tif
+data/processed_data/most_recent_burn_dates/2020_05_01.tif
+data/processed_data/most_recent_burn_dates/2020_06_01.tif
+data/processed_data/most_recent_burn_dates/2020_07_01.tif
+data/processed_data/most_recent_burn_dates/2020_08_01.tif
+data/processed_data/most_recent_burn_dates/2020_09_01.tif
+data/processed_data/most_recent_burn_dates/2020_10_01.tif
+data/processed_data/most_recent_burn_dates/2020_11_01.tif
+data/processed_data/most_recent_burn_dates/2020_12_01.tif
+data/processed_data/most_recent_burn_dates/2021_01_01.tif
+data/processed_data/most_recent_burn_dates/2021_02_01.tif
+data/processed_data/most_recent_burn_dates/2021_03_01.tif
+data/processed_data/most_recent_burn_dates/2021_04_01.tif
+data/processed_data/most_recent_burn_dates/2021_05_01.tif
+data/processed_data/most_recent_burn_dates/2021_06_01.tif
+data/processed_data/most_recent_burn_dates/2021_07_01.tif
+data/processed_data/most_recent_burn_dates/2021_08_01.tif
+data/processed_data/most_recent_burn_dates/2021_09_01.tif
+data/processed_data/most_recent_burn_dates/2021_10_01.tif
+data/processed_data/most_recent_burn_dates/2021_11_01.tif
+data/processed_data/most_recent_burn_dates/2021_12_01.tif
+data/processed_data/ndvi_relative_time_since_fire/2000_02_18.tif
+data/processed_data/ndvi_relative_time_since_fire/2000_03_05.tif
+data/processed_data/ndvi_relative_time_since_fire/2000_03_21.tif
+data/processed_data/ndvi_relative_time_since_fire/2000_04_06.tif
+data/processed_data/ndvi_relative_time_since_fire/2000_04_22.tif
+data/processed_data/ndvi_relative_time_since_fire/2000_05_08.tif
+data/processed_data/ndvi_relative_time_since_fire/2000_05_24.tif
+data/processed_data/ndvi_relative_time_since_fire/2000_06_09.tif
+data/processed_data/ndvi_relative_time_since_fire/2000_06_25.tif
+data/processed_data/ndvi_relative_time_since_fire/2000_07_11.tif
+data/processed_data/ndvi_relative_time_since_fire/2000_07_27.tif
+data/processed_data/ndvi_relative_time_since_fire/2000_08_12.tif
+data/processed_data/ndvi_relative_time_since_fire/2000_08_28.tif
+data/processed_data/ndvi_relative_time_since_fire/2000_09_13.tif
+data/processed_data/ndvi_relative_time_since_fire/2000_09_29.tif
+data/processed_data/ndvi_relative_time_since_fire/2000_10_15.tif
+data/processed_data/ndvi_relative_time_since_fire/2000_10_31.tif
+data/processed_data/ndvi_relative_time_since_fire/2000_11_16.tif
+data/processed_data/ndvi_relative_time_since_fire/2000_12_02.tif
+data/processed_data/ndvi_relative_time_since_fire/2000_12_18.tif
+data/processed_data/ndvi_relative_time_since_fire/2001_01_01.tif
+data/processed_data/ndvi_relative_time_since_fire/2001_01_17.tif
+data/processed_data/ndvi_relative_time_since_fire/2001_02_02.tif
+data/processed_data/ndvi_relative_time_since_fire/2001_02_18.tif
+data/processed_data/ndvi_relative_time_since_fire/2001_03_06.tif
+data/processed_data/ndvi_relative_time_since_fire/2001_03_22.tif
+data/processed_data/ndvi_relative_time_since_fire/2001_04_07.tif
+data/processed_data/ndvi_relative_time_since_fire/2001_04_23.tif
+data/processed_data/ndvi_relative_time_since_fire/2001_05_09.tif
+data/processed_data/ndvi_relative_time_since_fire/2001_05_25.tif
+data/processed_data/ndvi_relative_time_since_fire/2001_06_10.tif
+data/processed_data/ndvi_relative_time_since_fire/2001_06_26.tif
+data/processed_data/ndvi_relative_time_since_fire/2001_07_12.tif
+data/processed_data/ndvi_relative_time_since_fire/2001_07_28.tif
+data/processed_data/ndvi_relative_time_since_fire/2001_08_13.tif
+data/processed_data/ndvi_relative_time_since_fire/2001_08_29.tif
+data/processed_data/ndvi_relative_time_since_fire/2001_09_14.tif
+data/processed_data/ndvi_relative_time_since_fire/2001_09_30.tif
+data/processed_data/ndvi_relative_time_since_fire/2001_10_16.tif
+data/processed_data/ndvi_relative_time_since_fire/2001_11_01.tif
+data/processed_data/ndvi_relative_time_since_fire/2001_11_17.tif
+data/processed_data/ndvi_relative_time_since_fire/2001_12_03.tif
+data/processed_data/ndvi_relative_time_since_fire/2001_12_19.tif
+data/processed_data/ndvi_relative_time_since_fire/2002_01_01.tif
+data/processed_data/ndvi_relative_time_since_fire/2002_01_17.tif
+data/processed_data/ndvi_relative_time_since_fire/2002_02_02.tif
+data/processed_data/ndvi_relative_time_since_fire/2002_02_18.tif
+data/processed_data/ndvi_relative_time_since_fire/2002_03_06.tif
+data/processed_data/ndvi_relative_time_since_fire/2002_03_22.tif
+data/processed_data/ndvi_relative_time_since_fire/2002_04_07.tif
+data/processed_data/ndvi_relative_time_since_fire/2002_04_23.tif
+data/processed_data/ndvi_relative_time_since_fire/2002_05_09.tif
+data/processed_data/ndvi_relative_time_since_fire/2002_05_25.tif
+data/processed_data/ndvi_relative_time_since_fire/2002_06_10.tif
+data/processed_data/ndvi_relative_time_since_fire/2002_06_26.tif
+data/processed_data/ndvi_relative_time_since_fire/2002_07_12.tif
+data/processed_data/ndvi_relative_time_since_fire/2002_07_28.tif
+data/processed_data/ndvi_relative_time_since_fire/2002_08_13.tif
+data/processed_data/ndvi_relative_time_since_fire/2002_08_29.tif
+data/processed_data/ndvi_relative_time_since_fire/2002_09_14.tif
+data/processed_data/ndvi_relative_time_since_fire/2002_09_30.tif
+data/processed_data/ndvi_relative_time_since_fire/2002_10_16.tif
+data/processed_data/ndvi_relative_time_since_fire/2002_11_01.tif
+data/processed_data/ndvi_relative_time_since_fire/2002_11_17.tif
+data/processed_data/ndvi_relative_time_since_fire/2002_12_03.tif
+data/processed_data/ndvi_relative_time_since_fire/2002_12_19.tif
+data/processed_data/ndvi_relative_time_since_fire/2003_01_01.tif
+data/processed_data/ndvi_relative_time_since_fire/2003_01_17.tif
+data/processed_data/ndvi_relative_time_since_fire/2003_02_02.tif
+data/processed_data/ndvi_relative_time_since_fire/2003_02_18.tif
+data/processed_data/ndvi_relative_time_since_fire/2003_03_06.tif
+data/processed_data/ndvi_relative_time_since_fire/2003_03_22.tif
+data/processed_data/ndvi_relative_time_since_fire/2003_04_07.tif
+data/processed_data/ndvi_relative_time_since_fire/2003_04_23.tif
+data/processed_data/ndvi_relative_time_since_fire/2003_05_09.tif
+data/processed_data/ndvi_relative_time_since_fire/2003_05_25.tif
+data/processed_data/ndvi_relative_time_since_fire/2003_06_10.tif
+data/processed_data/ndvi_relative_time_since_fire/2003_06_26.tif
+data/processed_data/ndvi_relative_time_since_fire/2003_07_12.tif
+data/processed_data/ndvi_relative_time_since_fire/2003_07_28.tif
+data/processed_data/ndvi_relative_time_since_fire/2003_08_13.tif
+data/processed_data/ndvi_relative_time_since_fire/2003_08_29.tif
+data/processed_data/ndvi_relative_time_since_fire/2003_09_14.tif
+data/processed_data/ndvi_relative_time_since_fire/2003_09_30.tif
+data/processed_data/ndvi_relative_time_since_fire/2003_10_16.tif
+data/processed_data/ndvi_relative_time_since_fire/2003_11_01.tif
+data/processed_data/ndvi_relative_time_since_fire/2003_11_17.tif
+data/processed_data/ndvi_relative_time_since_fire/2003_12_03.tif
+data/processed_data/ndvi_relative_time_since_fire/2003_12_19.tif
+data/processed_data/ndvi_relative_time_since_fire/2004_01_01.tif
+data/processed_data/ndvi_relative_time_since_fire/2004_01_17.tif
+data/processed_data/ndvi_relative_time_since_fire/2004_02_02.tif
+data/processed_data/ndvi_relative_time_since_fire/2004_02_18.tif
+data/processed_data/ndvi_relative_time_since_fire/2004_03_05.tif
+data/processed_data/ndvi_relative_time_since_fire/2004_03_21.tif
+data/processed_data/ndvi_relative_time_since_fire/2004_04_06.tif
+data/processed_data/ndvi_relative_time_since_fire/2004_04_22.tif
+data/processed_data/ndvi_relative_time_since_fire/2004_05_08.tif
+data/processed_data/ndvi_relative_time_since_fire/2004_05_24.tif
+data/processed_data/ndvi_relative_time_since_fire/2004_06_09.tif
+data/processed_data/ndvi_relative_time_since_fire/2004_06_25.tif
+data/processed_data/ndvi_relative_time_since_fire/2004_07_11.tif
+data/processed_data/ndvi_relative_time_since_fire/2004_07_27.tif
+data/processed_data/ndvi_relative_time_since_fire/2004_08_12.tif
+data/processed_data/ndvi_relative_time_since_fire/2004_08_28.tif
+data/processed_data/ndvi_relative_time_since_fire/2004_09_13.tif
+data/processed_data/ndvi_relative_time_since_fire/2004_09_29.tif
+data/processed_data/ndvi_relative_time_since_fire/2004_10_15.tif
+data/processed_data/ndvi_relative_time_since_fire/2004_10_31.tif
+data/processed_data/ndvi_relative_time_since_fire/2004_11_16.tif
+data/processed_data/ndvi_relative_time_since_fire/2004_12_02.tif
+data/processed_data/ndvi_relative_time_since_fire/2004_12_18.tif
+data/processed_data/ndvi_relative_time_since_fire/2005_01_01.tif
+data/processed_data/ndvi_relative_time_since_fire/2005_01_17.tif
+data/processed_data/ndvi_relative_time_since_fire/2005_02_02.tif
+data/processed_data/ndvi_relative_time_since_fire/2005_02_18.tif
+data/processed_data/ndvi_relative_time_since_fire/2005_03_06.tif
+data/processed_data/ndvi_relative_time_since_fire/2005_03_22.tif
+data/processed_data/ndvi_relative_time_since_fire/2005_04_07.tif
+data/processed_data/ndvi_relative_time_since_fire/2005_04_23.tif
+data/processed_data/ndvi_relative_time_since_fire/2005_05_09.tif
+data/processed_data/ndvi_relative_time_since_fire/2005_05_25.tif
+data/processed_data/ndvi_relative_time_since_fire/2005_06_10.tif
+data/processed_data/ndvi_relative_time_since_fire/2005_06_26.tif
+data/processed_data/ndvi_relative_time_since_fire/2005_07_12.tif
+data/processed_data/ndvi_relative_time_since_fire/2005_07_28.tif
+data/processed_data/ndvi_relative_time_since_fire/2005_08_13.tif
+data/processed_data/ndvi_relative_time_since_fire/2005_08_29.tif
+data/processed_data/ndvi_relative_time_since_fire/2005_09_14.tif
+data/processed_data/ndvi_relative_time_since_fire/2005_09_30.tif
+data/processed_data/ndvi_relative_time_since_fire/2005_10_16.tif
+data/processed_data/ndvi_relative_time_since_fire/2005_11_01.tif
+data/processed_data/ndvi_relative_time_since_fire/2005_11_17.tif
+data/processed_data/ndvi_relative_time_since_fire/2005_12_03.tif
+data/processed_data/ndvi_relative_time_since_fire/2005_12_19.tif
+data/processed_data/ndvi_relative_time_since_fire/2006_01_01.tif
+data/processed_data/ndvi_relative_time_since_fire/2006_01_17.tif
+data/processed_data/ndvi_relative_time_since_fire/2006_02_02.tif
+data/processed_data/ndvi_relative_time_since_fire/2006_02_18.tif
+data/processed_data/ndvi_relative_time_since_fire/2006_03_06.tif
+data/processed_data/ndvi_relative_time_since_fire/2006_03_22.tif
+data/processed_data/ndvi_relative_time_since_fire/2006_04_07.tif
+data/processed_data/ndvi_relative_time_since_fire/2006_04_23.tif
+data/processed_data/ndvi_relative_time_since_fire/2006_05_09.tif
+data/processed_data/ndvi_relative_time_since_fire/2006_05_25.tif
+data/processed_data/ndvi_relative_time_since_fire/2006_06_10.tif
+data/processed_data/ndvi_relative_time_since_fire/2006_06_26.tif
+data/processed_data/ndvi_relative_time_since_fire/2006_07_12.tif
+data/processed_data/ndvi_relative_time_since_fire/2006_07_28.tif
+data/processed_data/ndvi_relative_time_since_fire/2006_08_13.tif
+data/processed_data/ndvi_relative_time_since_fire/2006_08_29.tif
+data/processed_data/ndvi_relative_time_since_fire/2006_09_14.tif
+data/processed_data/ndvi_relative_time_since_fire/2006_09_30.tif
+data/processed_data/ndvi_relative_time_since_fire/2006_10_16.tif
+data/processed_data/ndvi_relative_time_since_fire/2006_11_01.tif
+data/processed_data/ndvi_relative_time_since_fire/2006_11_17.tif
+data/processed_data/ndvi_relative_time_since_fire/2006_12_03.tif
+data/processed_data/ndvi_relative_time_since_fire/2006_12_19.tif
+data/processed_data/ndvi_relative_time_since_fire/2007_01_01.tif
+data/processed_data/ndvi_relative_time_since_fire/2007_01_17.tif
+data/processed_data/ndvi_relative_time_since_fire/2007_02_02.tif
+data/processed_data/ndvi_relative_time_since_fire/2007_02_18.tif
+data/processed_data/ndvi_relative_time_since_fire/2007_03_06.tif
+data/processed_data/ndvi_relative_time_since_fire/2007_03_22.tif
+data/processed_data/ndvi_relative_time_since_fire/2007_04_07.tif
+data/processed_data/ndvi_relative_time_since_fire/2007_04_23.tif
+data/processed_data/ndvi_relative_time_since_fire/2007_05_09.tif
+data/processed_data/ndvi_relative_time_since_fire/2007_05_25.tif
+data/processed_data/ndvi_relative_time_since_fire/2007_06_10.tif
+data/processed_data/ndvi_relative_time_since_fire/2007_06_26.tif
+data/processed_data/ndvi_relative_time_since_fire/2007_07_12.tif
+data/processed_data/ndvi_relative_time_since_fire/2007_07_28.tif
+data/processed_data/ndvi_relative_time_since_fire/2007_08_13.tif
+data/processed_data/ndvi_relative_time_since_fire/2007_08_29.tif
+data/processed_data/ndvi_relative_time_since_fire/2007_09_14.tif
+data/processed_data/ndvi_relative_time_since_fire/2007_09_30.tif
+data/processed_data/ndvi_relative_time_since_fire/2007_10_16.tif
+data/processed_data/ndvi_relative_time_since_fire/2007_11_01.tif
+data/processed_data/ndvi_relative_time_since_fire/2007_11_17.tif
+data/processed_data/ndvi_relative_time_since_fire/2007_12_03.tif
+data/processed_data/ndvi_relative_time_since_fire/2007_12_19.tif
+data/processed_data/ndvi_relative_time_since_fire/2008_01_01.tif
+data/processed_data/ndvi_relative_time_since_fire/2008_01_17.tif
+data/processed_data/ndvi_relative_time_since_fire/2008_02_02.tif
+data/processed_data/ndvi_relative_time_since_fire/2008_02_18.tif
+data/processed_data/ndvi_relative_time_since_fire/2008_03_05.tif
+data/processed_data/ndvi_relative_time_since_fire/2008_03_21.tif
+data/processed_data/ndvi_relative_time_since_fire/2008_04_06.tif
+data/processed_data/ndvi_relative_time_since_fire/2008_04_22.tif
+data/processed_data/ndvi_relative_time_since_fire/2008_05_08.tif
+data/processed_data/ndvi_relative_time_since_fire/2008_05_24.tif
+data/processed_data/ndvi_relative_time_since_fire/2008_06_09.tif
+data/processed_data/ndvi_relative_time_since_fire/2008_06_25.tif
+data/processed_data/ndvi_relative_time_since_fire/2008_07_11.tif
+data/processed_data/ndvi_relative_time_since_fire/2008_07_27.tif
+data/processed_data/ndvi_relative_time_since_fire/2008_08_12.tif
+data/processed_data/ndvi_relative_time_since_fire/2008_08_28.tif
+data/processed_data/ndvi_relative_time_since_fire/2008_09_13.tif
+data/processed_data/ndvi_relative_time_since_fire/2008_09_29.tif
+data/processed_data/ndvi_relative_time_since_fire/2008_10_15.tif
+data/processed_data/ndvi_relative_time_since_fire/2008_10_31.tif
+data/processed_data/ndvi_relative_time_since_fire/2008_11_16.tif
+data/processed_data/ndvi_relative_time_since_fire/2008_12_02.tif
+data/processed_data/ndvi_relative_time_since_fire/2008_12_18.tif
+data/processed_data/ndvi_relative_time_since_fire/2009_01_01.tif
+data/processed_data/ndvi_relative_time_since_fire/2009_01_17.tif
+data/processed_data/ndvi_relative_time_since_fire/2009_02_02.tif
+data/processed_data/ndvi_relative_time_since_fire/2009_02_18.tif
+data/processed_data/ndvi_relative_time_since_fire/2009_03_06.tif
+data/processed_data/ndvi_relative_time_since_fire/2009_03_22.tif
+data/processed_data/ndvi_relative_time_since_fire/2009_04_07.tif
+data/processed_data/ndvi_relative_time_since_fire/2009_04_23.tif
+data/processed_data/ndvi_relative_time_since_fire/2009_05_09.tif
+data/processed_data/ndvi_relative_time_since_fire/2009_05_25.tif
+data/processed_data/ndvi_relative_time_since_fire/2009_06_10.tif
+data/processed_data/ndvi_relative_time_since_fire/2009_06_26.tif
+data/processed_data/ndvi_relative_time_since_fire/2009_07_12.tif
+data/processed_data/ndvi_relative_time_since_fire/2009_07_28.tif
+data/processed_data/ndvi_relative_time_since_fire/2009_08_13.tif
+data/processed_data/ndvi_relative_time_since_fire/2009_08_29.tif
+data/processed_data/ndvi_relative_time_since_fire/2009_09_14.tif
+data/processed_data/ndvi_relative_time_since_fire/2009_09_30.tif
+data/processed_data/ndvi_relative_time_since_fire/2009_10_16.tif
+data/processed_data/ndvi_relative_time_since_fire/2009_11_01.tif
+data/processed_data/ndvi_relative_time_since_fire/2009_11_17.tif
+data/processed_data/ndvi_relative_time_since_fire/2009_12_03.tif
+data/processed_data/ndvi_relative_time_since_fire/2009_12_19.tif
+data/processed_data/ndvi_relative_time_since_fire/2010_01_01.tif
+data/processed_data/ndvi_relative_time_since_fire/2010_01_17.tif
+data/processed_data/ndvi_relative_time_since_fire/2010_02_02.tif
+data/processed_data/ndvi_relative_time_since_fire/2010_02_18.tif
+data/processed_data/ndvi_relative_time_since_fire/2010_03_06.tif
+data/processed_data/ndvi_relative_time_since_fire/2010_03_22.tif
+data/processed_data/ndvi_relative_time_since_fire/2010_04_07.tif
+data/processed_data/ndvi_relative_time_since_fire/2010_04_23.tif
+data/processed_data/ndvi_relative_time_since_fire/2010_05_09.tif
+data/processed_data/ndvi_relative_time_since_fire/2010_05_25.tif
+data/processed_data/ndvi_relative_time_since_fire/2010_06_10.tif
+data/processed_data/ndvi_relative_time_since_fire/2010_06_26.tif
+data/processed_data/ndvi_relative_time_since_fire/2010_07_12.tif
+data/processed_data/ndvi_relative_time_since_fire/2010_07_28.tif
+data/processed_data/ndvi_relative_time_since_fire/2010_08_13.tif
+data/processed_data/ndvi_relative_time_since_fire/2010_08_29.tif
+data/processed_data/ndvi_relative_time_since_fire/2010_09_14.tif
+data/processed_data/ndvi_relative_time_since_fire/2010_09_30.tif
+data/processed_data/ndvi_relative_time_since_fire/2010_10_16.tif
+data/processed_data/ndvi_relative_time_since_fire/2010_11_01.tif
+data/processed_data/ndvi_relative_time_since_fire/2010_11_17.tif
+data/processed_data/ndvi_relative_time_since_fire/2010_12_03.tif
+data/processed_data/ndvi_relative_time_since_fire/2010_12_19.tif
+data/processed_data/ndvi_relative_time_since_fire/2011_01_01.tif
+data/processed_data/ndvi_relative_time_since_fire/2011_01_17.tif
+data/processed_data/ndvi_relative_time_since_fire/2011_02_02.tif
+data/processed_data/ndvi_relative_time_since_fire/2011_02_18.tif
+data/processed_data/ndvi_relative_time_since_fire/2011_03_06.tif
+data/processed_data/ndvi_relative_time_since_fire/2011_03_22.tif
+data/processed_data/ndvi_relative_time_since_fire/2011_04_07.tif
+data/processed_data/ndvi_relative_time_since_fire/2011_04_23.tif
+data/processed_data/ndvi_relative_time_since_fire/2011_05_09.tif
+data/processed_data/ndvi_relative_time_since_fire/2011_05_25.tif
+data/processed_data/ndvi_relative_time_since_fire/2011_06_10.tif
+data/processed_data/ndvi_relative_time_since_fire/2011_06_26.tif
+data/processed_data/ndvi_relative_time_since_fire/2011_07_12.tif
+data/processed_data/ndvi_relative_time_since_fire/2011_07_28.tif
+data/processed_data/ndvi_relative_time_since_fire/2011_08_13.tif
+data/processed_data/ndvi_relative_time_since_fire/2011_08_29.tif
+data/processed_data/ndvi_relative_time_since_fire/2011_09_14.tif
+data/processed_data/ndvi_relative_time_since_fire/2011_09_30.tif
+data/processed_data/ndvi_relative_time_since_fire/2011_10_16.tif
+data/processed_data/ndvi_relative_time_since_fire/2011_11_01.tif
+data/processed_data/ndvi_relative_time_since_fire/2011_11_17.tif
+data/processed_data/ndvi_relative_time_since_fire/2011_12_03.tif
+data/processed_data/ndvi_relative_time_since_fire/2011_12_19.tif
+data/processed_data/ndvi_relative_time_since_fire/2012_01_01.tif
+data/processed_data/ndvi_relative_time_since_fire/2012_01_17.tif
+data/processed_data/ndvi_relative_time_since_fire/2012_02_02.tif
+data/processed_data/ndvi_relative_time_since_fire/2012_02_18.tif
+data/processed_data/ndvi_relative_time_since_fire/2012_03_05.tif
+data/processed_data/ndvi_relative_time_since_fire/2012_03_21.tif
+data/processed_data/ndvi_relative_time_since_fire/2012_04_06.tif
+data/processed_data/ndvi_relative_time_since_fire/2012_04_22.tif
+data/processed_data/ndvi_relative_time_since_fire/2012_05_08.tif
+data/processed_data/ndvi_relative_time_since_fire/2012_05_24.tif
+data/processed_data/ndvi_relative_time_since_fire/2012_06_09.tif
+data/processed_data/ndvi_relative_time_since_fire/2012_06_25.tif
+data/processed_data/ndvi_relative_time_since_fire/2012_07_11.tif
+data/processed_data/ndvi_relative_time_since_fire/2012_07_27.tif
+data/processed_data/ndvi_relative_time_since_fire/2012_08_12.tif
+data/processed_data/ndvi_relative_time_since_fire/2012_08_28.tif
+data/processed_data/ndvi_relative_time_since_fire/2012_09_13.tif
+data/processed_data/ndvi_relative_time_since_fire/2012_09_29.tif
+data/processed_data/ndvi_relative_time_since_fire/2012_10_15.tif
+data/processed_data/ndvi_relative_time_since_fire/2012_10_31.tif
+data/processed_data/ndvi_relative_time_since_fire/2012_11_16.tif
+data/processed_data/ndvi_relative_time_since_fire/2012_12_02.tif
+data/processed_data/ndvi_relative_time_since_fire/2012_12_18.tif
+data/processed_data/ndvi_relative_time_since_fire/2013_01_01.tif
+data/processed_data/ndvi_relative_time_since_fire/2013_01_17.tif
+data/processed_data/ndvi_relative_time_since_fire/2013_02_02.tif
+data/processed_data/ndvi_relative_time_since_fire/2013_02_18.tif
+data/processed_data/ndvi_relative_time_since_fire/2013_03_06.tif
+data/processed_data/ndvi_relative_time_since_fire/2013_03_22.tif
+data/processed_data/ndvi_relative_time_since_fire/2013_04_07.tif
+data/processed_data/ndvi_relative_time_since_fire/2013_04_23.tif
+data/processed_data/ndvi_relative_time_since_fire/2013_05_09.tif
+data/processed_data/ndvi_relative_time_since_fire/2013_05_25.tif
+data/processed_data/ndvi_relative_time_since_fire/2013_06_10.tif
+data/processed_data/ndvi_relative_time_since_fire/2013_06_26.tif
+data/processed_data/ndvi_relative_time_since_fire/2013_07_12.tif
+data/processed_data/ndvi_relative_time_since_fire/2013_07_28.tif
+data/processed_data/ndvi_relative_time_since_fire/2013_08_13.tif
+data/processed_data/ndvi_relative_time_since_fire/2013_08_29.tif
+data/processed_data/ndvi_relative_time_since_fire/2013_09_14.tif
+data/processed_data/ndvi_relative_time_since_fire/2013_09_30.tif
+data/processed_data/ndvi_relative_time_since_fire/2013_10_16.tif
+data/processed_data/ndvi_relative_time_since_fire/2013_11_01.tif
+data/processed_data/ndvi_relative_time_since_fire/2013_11_17.tif
+data/processed_data/ndvi_relative_time_since_fire/2013_12_03.tif
+data/processed_data/ndvi_relative_time_since_fire/2013_12_19.tif
+data/processed_data/ndvi_relative_time_since_fire/2014_01_01.tif
+data/processed_data/ndvi_relative_time_since_fire/2014_01_17.tif
+data/processed_data/ndvi_relative_time_since_fire/2014_02_02.tif
+data/processed_data/ndvi_relative_time_since_fire/2014_02_18.tif
+data/processed_data/ndvi_relative_time_since_fire/2014_03_06.tif
+data/processed_data/ndvi_relative_time_since_fire/2014_03_22.tif
+data/processed_data/ndvi_relative_time_since_fire/2014_04_07.tif
+data/processed_data/ndvi_relative_time_since_fire/2014_04_23.tif
+data/processed_data/ndvi_relative_time_since_fire/2014_05_09.tif
+data/processed_data/ndvi_relative_time_since_fire/2014_05_25.tif
+data/processed_data/ndvi_relative_time_since_fire/2014_06_10.tif
+data/processed_data/ndvi_relative_time_since_fire/2014_06_26.tif
+data/processed_data/ndvi_relative_time_since_fire/2014_07_12.tif
+data/processed_data/ndvi_relative_time_since_fire/2014_07_28.tif
+data/processed_data/ndvi_relative_time_since_fire/2014_08_13.tif
+data/processed_data/ndvi_relative_time_since_fire/2014_08_29.tif
+data/processed_data/ndvi_relative_time_since_fire/2014_09_14.tif
+data/processed_data/ndvi_relative_time_since_fire/2014_09_30.tif
+data/processed_data/ndvi_relative_time_since_fire/2014_10_16.tif
+data/processed_data/ndvi_relative_time_since_fire/2014_11_01.tif
+data/processed_data/ndvi_relative_time_since_fire/2014_11_17.tif
+data/processed_data/ndvi_relative_time_since_fire/2014_12_03.tif
+data/processed_data/ndvi_relative_time_since_fire/2014_12_19.tif
+data/processed_data/ndvi_relative_time_since_fire/2015_01_01.tif
+data/processed_data/ndvi_relative_time_since_fire/2015_01_17.tif
+data/processed_data/ndvi_relative_time_since_fire/2015_02_02.tif
+data/processed_data/ndvi_relative_time_since_fire/2015_02_18.tif
+data/processed_data/ndvi_relative_time_since_fire/2015_03_06.tif
+data/processed_data/ndvi_relative_time_since_fire/2015_03_22.tif
+data/processed_data/ndvi_relative_time_since_fire/2015_04_07.tif
+data/processed_data/ndvi_relative_time_since_fire/2015_04_23.tif
+data/processed_data/ndvi_relative_time_since_fire/2015_05_09.tif
+data/processed_data/ndvi_relative_time_since_fire/2015_05_25.tif
+data/processed_data/ndvi_relative_time_since_fire/2015_06_10.tif
+data/processed_data/ndvi_relative_time_since_fire/2015_06_26.tif
+data/processed_data/ndvi_relative_time_since_fire/2015_07_12.tif
+data/processed_data/ndvi_relative_time_since_fire/2015_07_28.tif
+data/processed_data/ndvi_relative_time_since_fire/2015_08_13.tif
+data/processed_data/ndvi_relative_time_since_fire/2015_08_29.tif
+data/processed_data/ndvi_relative_time_since_fire/2015_09_14.tif
+data/processed_data/ndvi_relative_time_since_fire/2015_09_30.tif
+data/processed_data/ndvi_relative_time_since_fire/2015_10_16.tif
+data/processed_data/ndvi_relative_time_since_fire/2015_11_01.tif
+data/processed_data/ndvi_relative_time_since_fire/2015_11_17.tif
+data/processed_data/ndvi_relative_time_since_fire/2015_12_03.tif
+data/processed_data/ndvi_relative_time_since_fire/2015_12_19.tif
+data/processed_data/ndvi_relative_time_since_fire/2016_01_01.tif
+data/processed_data/ndvi_relative_time_since_fire/2016_01_17.tif
+data/processed_data/ndvi_relative_time_since_fire/2016_02_02.tif
+data/processed_data/ndvi_relative_time_since_fire/2016_02_18.tif
+data/processed_data/ndvi_relative_time_since_fire/2016_03_05.tif
+data/processed_data/ndvi_relative_time_since_fire/2016_03_21.tif
+data/processed_data/ndvi_relative_time_since_fire/2016_04_06.tif
+data/processed_data/ndvi_relative_time_since_fire/2016_04_22.tif
+data/processed_data/ndvi_relative_time_since_fire/2016_05_08.tif
+data/processed_data/ndvi_relative_time_since_fire/2016_05_24.tif
+data/processed_data/ndvi_relative_time_since_fire/2016_06_09.tif
+data/processed_data/ndvi_relative_time_since_fire/2016_06_25.tif
+data/processed_data/ndvi_relative_time_since_fire/2016_07_11.tif
+data/processed_data/ndvi_relative_time_since_fire/2016_07_27.tif
+data/processed_data/ndvi_relative_time_since_fire/2016_08_12.tif
+data/processed_data/ndvi_relative_time_since_fire/2016_08_28.tif
+data/processed_data/ndvi_relative_time_since_fire/2016_09_13.tif
+data/processed_data/ndvi_relative_time_since_fire/2016_09_29.tif
+data/processed_data/ndvi_relative_time_since_fire/2016_10_15.tif
+data/processed_data/ndvi_relative_time_since_fire/2016_10_31.tif
+data/processed_data/ndvi_relative_time_since_fire/2016_11_16.tif
+data/processed_data/ndvi_relative_time_since_fire/2016_12_02.tif
+data/processed_data/ndvi_relative_time_since_fire/2016_12_18.tif
+data/processed_data/ndvi_relative_time_since_fire/2017_01_01.tif
+data/processed_data/ndvi_relative_time_since_fire/2017_01_17.tif
+data/processed_data/ndvi_relative_time_since_fire/2017_02_02.tif
+data/processed_data/ndvi_relative_time_since_fire/2017_02_18.tif
+data/processed_data/ndvi_relative_time_since_fire/2017_03_06.tif
+data/processed_data/ndvi_relative_time_since_fire/2017_03_22.tif
+data/processed_data/ndvi_relative_time_since_fire/2017_04_07.tif
+data/processed_data/ndvi_relative_time_since_fire/2017_04_23.tif
+data/processed_data/ndvi_relative_time_since_fire/2017_05_09.tif
+data/processed_data/ndvi_relative_time_since_fire/2017_05_25.tif
+data/processed_data/ndvi_relative_time_since_fire/2017_06_10.tif
+data/processed_data/ndvi_relative_time_since_fire/2017_06_26.tif
+data/processed_data/ndvi_relative_time_since_fire/2017_07_12.tif
+data/processed_data/ndvi_relative_time_since_fire/2017_07_28.tif
+data/processed_data/ndvi_relative_time_since_fire/2017_08_13.tif
+data/processed_data/ndvi_relative_time_since_fire/2017_08_29.tif
+data/processed_data/ndvi_relative_time_since_fire/2017_09_14.tif
+data/processed_data/ndvi_relative_time_since_fire/2017_09_30.tif
+data/processed_data/ndvi_relative_time_since_fire/2017_10_16.tif
+data/processed_data/ndvi_relative_time_since_fire/2017_11_01.tif
+data/processed_data/ndvi_relative_time_since_fire/2017_11_17.tif
+data/processed_data/ndvi_relative_time_since_fire/2017_12_03.tif
+data/processed_data/ndvi_relative_time_since_fire/2017_12_19.tif
+data/processed_data/ndvi_relative_time_since_fire/2018_01_01.tif
+data/processed_data/ndvi_relative_time_since_fire/2018_01_17.tif
+data/processed_data/ndvi_relative_time_since_fire/2018_02_02.tif
+data/processed_data/ndvi_relative_time_since_fire/2018_02_18.tif
+data/processed_data/ndvi_relative_time_since_fire/2018_03_06.tif
+data/processed_data/ndvi_relative_time_since_fire/2018_03_22.tif
+data/processed_data/ndvi_relative_time_since_fire/2018_04_07.tif
+data/processed_data/ndvi_relative_time_since_fire/2018_04_23.tif
+data/processed_data/ndvi_relative_time_since_fire/2018_05_09.tif
+data/processed_data/ndvi_relative_time_since_fire/2018_05_25.tif
+data/processed_data/ndvi_relative_time_since_fire/2018_06_10.tif
+data/processed_data/ndvi_relative_time_since_fire/2018_06_26.tif
+data/processed_data/ndvi_relative_time_since_fire/2018_07_12.tif
+data/processed_data/ndvi_relative_time_since_fire/2018_07_28.tif
+data/processed_data/ndvi_relative_time_since_fire/2018_08_13.tif
+data/processed_data/ndvi_relative_time_since_fire/2018_08_29.tif
+data/processed_data/ndvi_relative_time_since_fire/2018_09_14.tif
+data/processed_data/ndvi_relative_time_since_fire/2018_09_30.tif
+data/processed_data/ndvi_relative_time_since_fire/2018_10_16.tif
+data/processed_data/ndvi_relative_time_since_fire/2018_11_01.tif
+data/processed_data/ndvi_relative_time_since_fire/2018_11_17.tif
+data/processed_data/ndvi_relative_time_since_fire/2018_12_03.tif
+data/processed_data/ndvi_relative_time_since_fire/2018_12_19.tif
+data/processed_data/ndvi_relative_time_since_fire/2019_01_01.tif
+data/processed_data/ndvi_relative_time_since_fire/2019_01_17.tif
+data/processed_data/ndvi_relative_time_since_fire/2019_02_02.tif
+data/processed_data/ndvi_relative_time_since_fire/2019_02_18.tif
+data/processed_data/ndvi_relative_time_since_fire/2019_03_06.tif
+data/processed_data/ndvi_relative_time_since_fire/2019_03_22.tif
+data/processed_data/ndvi_relative_time_since_fire/2019_04_07.tif
+data/processed_data/ndvi_relative_time_since_fire/2019_04_23.tif
+data/processed_data/ndvi_relative_time_since_fire/2019_05_09.tif
+data/processed_data/ndvi_relative_time_since_fire/2019_05_25.tif
+data/processed_data/ndvi_relative_time_since_fire/2019_06_10.tif
+data/processed_data/ndvi_relative_time_since_fire/2019_06_26.tif
+data/processed_data/ndvi_relative_time_since_fire/2019_07_12.tif
+data/processed_data/ndvi_relative_time_since_fire/2019_07_28.tif
+data/processed_data/ndvi_relative_time_since_fire/2019_08_13.tif
+data/processed_data/ndvi_relative_time_since_fire/2019_08_29.tif
+data/processed_data/ndvi_relative_time_since_fire/2019_09_14.tif
+data/processed_data/ndvi_relative_time_since_fire/2019_09_30.tif
+data/processed_data/ndvi_relative_time_since_fire/2019_10_16.tif
+data/processed_data/ndvi_relative_time_since_fire/2019_11_01.tif
+data/processed_data/ndvi_relative_time_since_fire/2019_11_17.tif
+data/processed_data/ndvi_relative_time_since_fire/2019_12_03.tif
+data/processed_data/ndvi_relative_time_since_fire/2019_12_19.tif
+data/processed_data/ndvi_relative_time_since_fire/2020_01_01.tif
+data/processed_data/ndvi_relative_time_since_fire/2020_01_17.tif
+data/processed_data/ndvi_relative_time_since_fire/2020_02_02.tif
+data/processed_data/ndvi_relative_time_since_fire/2020_02_18.tif
+data/processed_data/ndvi_relative_time_since_fire/2020_03_05.tif
+data/processed_data/ndvi_relative_time_since_fire/2020_03_21.tif
+data/processed_data/ndvi_relative_time_since_fire/2020_04_06.tif
+data/processed_data/ndvi_relative_time_since_fire/2020_04_22.tif
+data/processed_data/ndvi_relative_time_since_fire/2020_05_08.tif
+data/processed_data/ndvi_relative_time_since_fire/2020_05_24.tif
+data/processed_data/ndvi_relative_time_since_fire/2020_06_09.tif
+data/processed_data/ndvi_relative_time_since_fire/2020_06_25.tif
+data/processed_data/ndvi_relative_time_since_fire/2020_07_11.tif
+data/processed_data/ndvi_relative_time_since_fire/2020_07_27.tif
+data/processed_data/ndvi_relative_time_since_fire/2020_08_12.tif
+data/processed_data/ndvi_relative_time_since_fire/2020_08_28.tif
+data/processed_data/ndvi_relative_time_since_fire/2020_09_13.tif
+data/processed_data/ndvi_relative_time_since_fire/2020_09_29.tif
+data/processed_data/ndvi_relative_time_since_fire/2020_10_15.tif
+data/processed_data/ndvi_relative_time_since_fire/2020_10_31.tif
+data/processed_data/ndvi_relative_time_since_fire/2020_11_16.tif
+data/processed_data/ndvi_relative_time_since_fire/2020_12_02.tif
+data/processed_data/ndvi_relative_time_since_fire/2020_12_18.tif
+data/processed_data/ndvi_relative_time_since_fire/2021_01_01.tif
+data/processed_data/ndvi_relative_time_since_fire/2021_01_17.tif
+data/processed_data/ndvi_relative_time_since_fire/2021_02_02.tif
+data/processed_data/ndvi_relative_time_since_fire/2021_02_18.tif
+data/processed_data/ndvi_relative_time_since_fire/2021_03_06.tif
+data/processed_data/ndvi_relative_time_since_fire/2021_03_22.tif
+data/processed_data/ndvi_relative_time_since_fire/2021_04_07.tif
+data/processed_data/ndvi_relative_time_since_fire/2021_04_23.tif
+data/processed_data/ndvi_relative_time_since_fire/2021_05_09.tif
+data/processed_data/ndvi_relative_time_since_fire/2021_05_25.tif
+data/processed_data/ndvi_relative_time_since_fire/2021_06_10.tif
+data/processed_data/ndvi_relative_time_since_fire/2021_06_26.tif
+data/processed_data/ndvi_relative_time_since_fire/2021_07_12.tif
+data/processed_data/ndvi_relative_time_since_fire/2021_07_28.tif
+data/processed_data/ndvi_relative_time_since_fire/2021_08_13.tif
+data/processed_data/ndvi_relative_time_since_fire/2021_08_29.tif
+data/processed_data/ndvi_relative_time_since_fire/2021_09_14.tif
+data/processed_data/ndvi_relative_time_since_fire/2021_09_30.tif
+data/processed_data/ndvi_relative_time_since_fire/2021_10_16.tif
+data/processed_data/ndvi_relative_time_since_fire/2021_11_01.tif
+data/processed_data/ndvi_relative_time_since_fire/2021_11_17.tif
+data/processed_data/ndvi_relative_time_since_fire/2021_12_03.tif
+data/processed_data/precipitation_chelsa/CHELSA_prec_01_V1.2_land_clipped.tif
+data/processed_data/precipitation_chelsa/CHELSA_prec_07_V1.2_land_clipped.tif
+data/raw_data/alos/alos_chili.tif
+data/raw_data/alos/alos_mtpi.tif
+data/raw_data/alos/alos_topographic_diversity.tif
+data/raw_data/alos/landforms.tif
+data/raw_data/climate_chelsa/bio/bio_V1.2/clipped/CHELSA_bio10_01_V1.2_clipped.tif
+data/raw_data/climate_chelsa/bio/bio_V1.2/clipped/CHELSA_bio10_02_V1.2_clipped.tif
+data/raw_data/climate_chelsa/bio/bio_V1.2/clipped/CHELSA_bio10_03_V1.2_clipped.tif
+data/raw_data/climate_chelsa/bio/bio_V1.2/clipped/CHELSA_bio10_04_V1.2_clipped.tif
+data/raw_data/climate_chelsa/bio/bio_V1.2/clipped/CHELSA_bio10_05_V1.2_clipped.tif
+data/raw_data/climate_chelsa/bio/bio_V1.2/clipped/CHELSA_bio10_06_V1.2_clipped.tif
+data/raw_data/climate_chelsa/bio/bio_V1.2/clipped/CHELSA_bio10_07_V1.2_clipped.tif
+data/raw_data/climate_chelsa/bio/bio_V1.2/clipped/CHELSA_bio10_08_V1.2_clipped.tif
+data/raw_data/climate_chelsa/bio/bio_V1.2/clipped/CHELSA_bio10_09_V1.2_clipped.tif
+data/raw_data/climate_chelsa/bio/bio_V1.2/clipped/CHELSA_bio10_10_V1.2_clipped.tif
+data/raw_data/climate_chelsa/bio/bio_V1.2/clipped/CHELSA_bio10_11_V1.2_clipped.tif
+data/raw_data/climate_chelsa/bio/bio_V1.2/clipped/CHELSA_bio10_12_V1.2_clipped.tif
+data/raw_data/climate_chelsa/bio/bio_V1.2/clipped/CHELSA_bio10_13_V1.2_clipped.tif
+data/raw_data/climate_chelsa/bio/bio_V1.2/clipped/CHELSA_bio10_14_V1.2_clipped.tif
+data/raw_data/climate_chelsa/bio/bio_V1.2/clipped/CHELSA_bio10_15_V1.2_clipped.tif
+data/raw_data/climate_chelsa/bio/bio_V1.2/clipped/CHELSA_bio10_16_V1.2_clipped.tif
+data/raw_data/climate_chelsa/bio/bio_V1.2/clipped/CHELSA_bio10_17_V1.2_clipped.tif
+data/raw_data/climate_chelsa/bio/bio_V1.2/clipped/CHELSA_bio10_18_V1.2_clipped.tif
+data/raw_data/climate_chelsa/bio/bio_V1.2/clipped/CHELSA_bio10_19_V1.2_clipped.tif
+data/raw_data/climate_chelsa/chelsa_citation.bib
+data/raw_data/clouds_wilson/MODCF_interannualSD.tif
+data/raw_data/clouds_wilson/MODCF_intraannualSD.tif
+data/raw_data/clouds_wilson/MODCF_meanannual.tif
+data/raw_data/clouds_wilson/MODCF_monthlymean_01.tif
+data/raw_data/clouds_wilson/MODCF_monthlymean_02.tif
+data/raw_data/clouds_wilson/MODCF_monthlymean_03.tif
+data/raw_data/clouds_wilson/MODCF_monthlymean_04.tif
+data/raw_data/clouds_wilson/MODCF_monthlymean_05.tif
+data/raw_data/clouds_wilson/MODCF_monthlymean_06.tif
+data/raw_data/clouds_wilson/MODCF_monthlymean_07.tif
+data/raw_data/clouds_wilson/MODCF_monthlymean_08.tif
+data/raw_data/clouds_wilson/MODCF_monthlymean_09.tif
+data/raw_data/clouds_wilson/MODCF_monthlymean_10.tif
+data/raw_data/clouds_wilson/MODCF_monthlymean_11.tif
+data/raw_data/clouds_wilson/MODCF_monthlymean_12.tif
+data/raw_data/clouds_wilson/MODCF_seasonality_concentration.tif
+data/raw_data/clouds_wilson/MODCF_seasonality_rgb.tif
+data/raw_data/clouds_wilson/MODCF_seasonality_theta.tif
+data/raw_data/clouds_wilson/MODCF_seasonality_visct.tif
+data/raw_data/clouds_wilson/MODCF_spatialSD_1deg.tif
+data/raw_data/elevation_nasadem/nasadem.tif
+data/raw_data/fire_modis/2021_11_01.tif
+data/raw_data/fire_modis/2021_12_01.tif
+data/raw_data/kndvi_modis/.tif
+data/raw_data/landcover_za/SA_NLC_2020_GEO.tif
+data/raw_data/landcover_za/SA_NLC_2020_GEO.tif.vat.cpg
+data/raw_data/landcover_za/SA_NLC_2020_GEO.tif.vat.dbf
+data/raw_data/ndvi_dates_modis/.tif
+data/raw_data/ndvi_dates_modis/2022_01_01.tif
+data/raw_data/ndvi_dates_modis/2022_01_17.tif
+data/raw_data/ndvi_modis/.tif
+data/raw_data/ndvi_modis/2022_01_01.tif
+data/raw_data/ndvi_modis/2022_01_17.tif
+data/raw_data/precipitation_chelsa/chelsa_citation.bib
+data/raw_data/precipitation_chelsa/prec/prec_V1.2/clipped/CHELSA_prec_01_V1.2_land_clipped.grd
+data/raw_data/precipitation_chelsa/prec/prec_V1.2/clipped/CHELSA_prec_01_V1.2_land_clipped.gri
+data/raw_data/precipitation_chelsa/prec/prec_V1.2/clipped/CHELSA_prec_01_V1.2_land_clipped.tif
+data/raw_data/precipitation_chelsa/prec/prec_V1.2/clipped/CHELSA_prec_07_V1.2_land_clipped.grd
+data/raw_data/precipitation_chelsa/prec/prec_V1.2/clipped/CHELSA_prec_07_V1.2_land_clipped.gri
+data/raw_data/precipitation_chelsa/prec/prec_V1.2/clipped/CHELSA_prec_07_V1.2_land_clipped.tif
+data/remnant_distance.tif
+data/remnants.tif
+firemodel_predict
+index.md
+index_files/figure-gfm/p1-1.png
+index_files/figure-gfm/plot-1.png
+scratch_code/test.zip
+scratch_code/wc2.1_10m_tmin_01.tif
+data/raw_data/fire_modis/log.csv
+data/raw_data/ndvi_dates_modis/log.csv
+data/raw_data/ndvi_modis/log.csv
diff --git a/DESCRIPTION b/DESCRIPTION
index 9bf7a592..9503053d 100644
--- a/DESCRIPTION
+++ b/DESCRIPTION
@@ -1,10 +1,10 @@
Package: EMMAv1
Type: Project
Title: EMMA Targets Workflow
-Version: 0.1.0
+Version: 0.2.0
Author: Adam M. Wilson
Maintainer: Adam M. Wilson
- Description: Example targets workflow for GitHub actions
+ Description: EMMA data workflow using targets, AppEEARS, and GitHub releases
License: MIT + file LICENSE
Encoding: UTF-8
LazyData: true
@@ -14,12 +14,22 @@ Imports:
viridis,
colourvalues,
sf,
- raster,
+ terra,
testthat,
kableExtra,
knitr,
- cmdstanr,
- posterior,
- bayesplot
+ appeears,
+ piggyback,
+ lubridate,
+ jsonlite,
+ dplyr,
+ arrow,
+ targets,
+ geotargets,
+ janitor,
+ ncdf4
Suggests:
+ rgee,
+ reticulate,
+ raster,
RoxygenNote: 7.1.1
diff --git a/R/appeears_auth.R b/R/appeears_auth.R
new file mode 100644
index 00000000..2ec66a98
--- /dev/null
+++ b/R/appeears_auth.R
@@ -0,0 +1,42 @@
+library(appeears)
+
+# AppEEARS authentication via keyring (no .netrc)
+earthdata_user <- Sys.getenv("EARTHDATA_USER")
+earthdata_pass <- Sys.getenv("EARTHDATA_PASSWORD")
+
+if (earthdata_user != "" && earthdata_pass != "") {
+ message("Setting up NASA EarthData authentication (keyring file backend)")
+
+ # Configure file keyring backend and location
+ if (Sys.getenv("R_KEYRING_PASSWORD") == "") {
+ Sys.setenv(R_KEYRING_PASSWORD = earthdata_pass)
+ }
+ if (Sys.getenv("R_KEYRING_FILE") == "") {
+ Sys.setenv(R_KEYRING_FILE = path.expand("~/.config/r-keyring/appeears.keyring"))
+ }
+ options(keyring_backend = "file")
+ suppressWarnings(dir.create(dirname(Sys.getenv("R_KEYRING_FILE")), recursive = TRUE, showWarnings = FALSE))
+
+ kr_name <- "appeears"
+ kr_pwd <- Sys.getenv("R_KEYRING_PASSWORD")
+
+ # Create keyring only if missing
+ existing_kr <- tryCatch(keyring::keyring_list()$keyring, error = function(e) character(0))
+ if (!(kr_name %in% existing_kr)) {
+ keyring::keyring_create(kr_name, password = kr_pwd)
+ }
+
+ # Unlock if locked (non-interactive using env password)
+ if (keyring::keyring_is_locked(kr_name)) {
+ keyring::keyring_unlock(kr_name, password = kr_pwd)
+ }
+
+ # Store credentials for appeears token refresh
+ suppressMessages(appeears::rs_set_key(user = earthdata_user, password = earthdata_pass))
+
+ # Authenticate (reads from keyring)
+ rstoken <- appeears::rs_login(earthdata_user)
+ message("AppEEARS authentication configured")
+} else {
+ warning("EARTHDATA credentials not found. Set EARTHDATA_USER and EARTHDATA_PASSWORD environment variables.")
+}
diff --git a/R/ccr_startup.sh b/R/ccr_startup.sh
new file mode 100644
index 00000000..6a187c46
--- /dev/null
+++ b/R/ccr_startup.sh
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+
+## Script to launch an interactive Apptainer session on CCR
+
+ssh vortex.ccr.buffalo.edu
+salloc --cluster=faculty --qos=adamw --partition=adamw \
+ --job-name=InteractiveJob --nodes=1 --ntasks=4 \
+ --mem=10G -C INTEL --time=24:00:00
+
+
+export GROUP="adamw"
+export PROJECT_FOLDER="/projects/academic/"$GROUP
+export APPTAINER_CACHEDIR="/vscratch/grp-adamw/"$USER"/singularity"
+export SIF_PATH=$PROJECT_FOLDER"/users/"$USER"/singularity"
+export SIF_FILE="AdamWilsonLab-emma_docker-latest.sif"
+
+# set singularity cache and tmp directories to the same as apptainer
+# needed because CCR is still using singularity and it will use these directories
+export SINGULARITY_CACHEDIR=$APPTAINER_CACHEDIR
+export SINGULARITY_TMPDIR=$APPTAINER_TMPDIR
+export SINGULARITY_LOCALCACHEDIR=$APPTAINER_LOCALCACHEDIR
+
+
+apptainer run \
+ --bind $PROJECT_FOLDER:$PROJECT_FOLDER \
+ --bind $APPTAINER_CACHEDIR/tmp:/tmp \
+ --bind $APPTAINER_CACHEDIR/run:/run \
+ $SIF_PATH/$SIF_FILE R
diff --git a/R/data_chelsa.R b/R/data_chelsa.R
new file mode 100644
index 00000000..8a5bbbb6
--- /dev/null
+++ b/R/data_chelsa.R
@@ -0,0 +1,184 @@
+#R script to download climate data (CHELSA)
+
+library(terra)
+library(ncdf4)
+
+#' @author Brian Maitner & Adam Wilson
+#' @description This function will download CHELSA climate data if it isn't present, and (invisibly) return a NULL if it is present
+#' @param temp_directory Where to save the files, defaults to "data/raw_data/climate_chelsa/"
+#' @param domain domain (sf polygon) used for masking
+#' @param tag Tag for the release
+#' @import terra
+get_chelsa <- function(temp_directory = "data/temp/raw_data/climate_chelsa/",
+ tag = "raw_static",
+ domain){
+
+ #ensure temp directory is empty
+
+ if(dir.exists(temp_directory)){
+ unlink(x = file.path(temp_directory), recursive = TRUE, force = TRUE)
+ }
+
+ #make a directory if one doesn't exist yet
+
+ if(!dir.exists(temp_directory)){
+ dir.create(temp_directory,recursive = TRUE)
+ }
+
+
+ #Make sure there is a release by attempting to create one. If it already exists, this will fail
+
+ tryCatch(expr = pb_new_release(repo = "AdamWilsonLab/emma_envdata",
+ tag = tag),
+ error = function(e){message("Previous release found")})
+
+ #Adjust the download timeout duration (this needs to be large enough to allow the download to complete)
+
+ if(getOption('timeout') < 1000){
+ options(timeout = 1000)
+ }
+
+
+ #Transform domain to wgs84 to get the coordinates
+
+ # domain_extent <-
+ # domain %>%
+ # st_transform(crs("+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0")@projargs)%>%
+ # extent()
+
+ domain_tf <-
+ domain %>%
+ st_as_sf() %>%
+ sf::st_transform(crs("+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0"))
+
+ # Download the data
+ # Note that it would be useful to clip these to a polygon to save space
+ # It would also be useful if only the relevant data could be downloaded (rather than downloading and THEN pruning)
+
+ # CF-compliant metadata for CHELSA bioclimatic variables
+ bio_metadata <- tribble(
+ ~bio_name, ~long_name, ~units,
+ "bio01", "Annual Mean Temperature", "°C * 10",
+ "bio02", "Mean Diurnal Range", "°C * 10",
+ "bio03", "Isothermality", "%",
+ "bio04", "Temperature Seasonality", "°C * 10",
+ "bio05", "Max Temperature of Warmest Month", "°C * 10",
+ "bio06", "Min Temperature of Coldest Month", "°C * 10",
+ "bio07", "Temperature Annual Range", "°C * 10",
+ "bio08", "Mean Temperature of Wettest Quarter", "°C * 10",
+ "bio09", "Mean Temperature of Driest Quarter", "°C * 10",
+ "bio10", "Mean Temperature of Warmest Quarter", "°C * 10",
+ "bio11", "Mean Temperature of Coldest Quarter", "°C * 10",
+ "bio12", "Annual Precipitation", "mm",
+ "bio13", "Precipitation of Wettest Month", "mm",
+ "bio14", "Precipitation of Driest Month", "mm",
+ "bio15", "Precipitation Seasonality", "%",
+ "bio16", "Precipitation of Wettest Quarter", "mm",
+ "bio17", "Precipitation of Driest Quarter", "mm",
+ "bio18", "Precipitation of Warmest Quarter", "mm",
+ "bio19", "Precipitation of Coldest Quarter", "mm"
+ )
+
+ # Record download date
+ download_date <- Sys.Date()
+
+ for(idx in 1:nrow(bio_metadata)){
+ i <- bio_metadata$bio_name[idx]
+
+# Download the file
+ robust_download_file(url = paste("https://os.unil.cloud.switch.ch/chelsa02/chelsa/global/bioclim/",i,"/1981-2010/CHELSA_bio",sprintf("%02d", idx),"_1981-2010_V.2.1.tif",sep = ""),
+ destfile = file.path(temp_directory,paste("CHELSA_bio",sprintf("%02d", idx),"_1981-2010_V.2.1.tif",sep = "")),
+ max_attempts = 10,
+ sleep_time = 10
+ )
+
+ # load
+ rast_i <- terra::rast(file.path(temp_directory,paste("CHELSA_bio",sprintf("%02d", idx),"_1981-2010_V.2.1.tif",sep = "")))
+
+ # crop
+
+ rast_i <- terra::crop(x = rast_i,
+ y = ext(domain_tf))
+
+ # mask
+ rast_i <-
+ terra::mask(rast_i,
+ mask = terra::vect(domain_tf))
+
+ # Write as NetCDF with CF-compliant metadata
+ nc_filename <- file.path(temp_directory, paste("CHELSA_", i, "_1981-2010_V.2.1.nc", sep = ""))
+
+ # Use terra's writeCDF function which creates NetCDF4 files
+ terra::writeCDF(x = rast_i,
+ filename = nc_filename,
+ overwrite = TRUE,
+ compression = 9)
+
+ # Add CF-compliant metadata using ncdf4 package
+ nc_file <- ncdf4::nc_open(nc_filename, write = TRUE)
+
+ # Get variable name (should be the first variable in the file)
+ var_name <- names(rast_i)
+ if (is.null(var_name) || var_name == "") {
+ var_name <- i
+ }
+
+ # Get metadata for this bioclimatic variable
+ long_name <- bio_metadata$long_name[idx]
+ units <- bio_metadata$units[idx]
+
+ # Add global attributes
+ ncdf4::ncatt_put(nc_file, 0, "title",
+ paste("CHELSA Bioclimatic Variable", i, sep = " "))
+ ncdf4::ncatt_put(nc_file, 0, "source", "CHELSA v.2.1 (Climatologies at high resolution for the earth land areas)")
+ ncdf4::ncatt_put(nc_file, 0, "dataset_url", "https://chelsa-climate.org/")
+ ncdf4::ncatt_put(nc_file, 0, "download_date", as.character(download_date))
+ ncdf4::ncatt_put(nc_file, 0, "temporal_range", "1981-2010")
+ ncdf4::ncatt_put(nc_file, 0, "Conventions", "CF-1.8")
+ ncdf4::ncatt_put(nc_file, 0, "history",
+ paste("Downloaded on", as.character(download_date),
+ "and clipped to domain. Processed using terra and ncdf4 R packages. "))
+
+ # Add variable attributes (long_name and units)
+ ncdf4::ncatt_put(nc_file, 1, "long_name", long_name)
+ ncdf4::ncatt_put(nc_file, 1, "units", units)
+ ncdf4::ncatt_put(nc_file, 1, "standard_name", paste("bioclimatic_variable_", i, sep = ""))
+
+ ncdf4::nc_close(nc_file)
+
+ rm(rast_i)
+
+ }
+
+ rm(i)
+
+ # release
+ to_release <-
+ list.files(path = file.path(temp_directory),
+ recursive = TRUE,
+ full.names = TRUE)
+
+
+ to_release <-
+ to_release[grepl(pattern = "CHELSA",
+ ignore.case = TRUE,
+ x = basename(to_release))]
+
+ # Filter for NetCDF files only
+ to_release <- to_release[grepl(pattern = "\\.nc$", x = to_release)]
+
+ # pb_upload(repo = "AdamWilsonLab/emma_envdata",
+ # file = to_release,
+ # tag = tag)
+
+ # delete directory and contents
+ # unlink(x = file.path(temp_directory), recursive = TRUE, force = TRUE)
+
+
+
+ message("CHELSA climate files downloaded")
+ return(Sys.Date())
+
+
+} # end fx
+
diff --git a/R/data_vegmap.R b/R/data_vegmap.R
new file mode 100644
index 00000000..f4028f9a
--- /dev/null
+++ b/R/data_vegmap.R
@@ -0,0 +1,167 @@
+## Process Vegmap to add field related to biome type
+
+data_vegmap <- function(domain_raster,
+ vegmap_shp,
+ disagg_factor = 10,
+ out_file = "data/raw/vegmap.nc") {
+
+ # Load domain raster (may be passed as file path or raster object)
+ domain <- if (is.character(domain_raster)) {
+ rast(domain_raster, "domain")
+ } else {
+ domain_raster
+ }
+
+ # Load and prep vegmap
+ vegmap_sf <- st_read(vegmap_shp, quiet = TRUE) %>%
+ janitor::clean_names() %>%
+ st_make_valid() %>%
+ st_transform(st_crs(domain, proj = TRUE)) %>%
+ st_intersection(st_as_sfc(st_bbox(domain))) |> #crop to domain
+ mutate(t_vegtypeid = as.numeric(factor(t_mapcode))) #create numeric vegtype ID
+
+ # Create fine template to reduce sliver effects, then modal aggregate back
+ template_fine <- disagg(domain, disagg_factor)
+
+ rasterize_modal <- function(field_name) {
+ r_fine <- terra::rasterize(
+ x = vect(vegmap_sf),
+ y = template_fine,
+ field = field_name,
+ touches = TRUE
+ )
+ aggregated <- terra::aggregate(r_fine, disagg_factor, fun = "modal")
+ # Resample to exactly match domain grid (nearest neighbor for categorical)
+ terra::resample(aggregated, domain, method = "near")
+ }
+
+ biome_raster <- rasterize_modal("t_biomeid")
+ bioregion_raster <- rasterize_modal("t_brgnid")
+ vegtype_raster <- rasterize_modal("t_vegtypeid")
+
+ # Combine into multiband raster
+ multiband <- c(biome_raster, bioregion_raster, vegtype_raster)
+ names(multiband) <- c("vegbiome", "vegbioregion", "vegtype")
+
+ # Mask to domain (set to NA where domain is NA)
+ domain_mask <- !is.na(domain)
+ multiband <- terra::mask(multiband, domain_mask, maskvalues = 0)
+
+ # Set units (preserved through cache with terra_preserve_metadata = "zip")
+ units(multiband) <- c("dimensionless", "dimensionless", "dimensionless")
+
+ # Lookup table for IDs -> names
+ lookup_tbl <- vegmap_sf %>%
+ st_drop_geometry() %>%
+ dplyr::select(t_biomeid, t_brgnid, t_vegtypeid, t_mapcode, t_name, t_biome, t_bioregio) %>%
+ dplyr::rename(vegbiome = t_biomeid, vegbioregion = t_brgnid, vegtype = t_vegtypeid) %>%
+ dplyr::distinct()
+
+ # Create output file path (ensure directory exists)
+ output_file <- out_file
+ dir.create(dirname(output_file), recursive = TRUE, showWarnings = FALSE)
+
+ # Get spatial extent and resolution for dimensions
+ ext <- ext(multiband)
+ dx <- res(multiband)[1]
+ dy <- res(multiband)[2]
+
+ x_vals <- seq(ext$xmin + dx/2, ext$xmax - dx/2, by = dx)
+ y_vals <- seq(ext$ymax - dy/2, ext$ymin + dy/2, by = -dy)
+
+ # Define dimensions with coordinate vectors
+ dim_x <- ncdf4::ncdim_def(name = "easting", units = "meter", vals = x_vals, longname = "easting")
+ dim_y <- ncdf4::ncdim_def(name = "northing", units = "meter", vals = y_vals, longname = "northing")
+
+ # Define variables with compression level 9 for categorical data (storage as short integers)
+ var_biome <- ncdf4::ncvar_def(
+ name = "vegbiome",
+ units = "dimensionless",
+ dim = list(dim_x, dim_y),
+ longname = "Biome ID (biomeid_18)",
+ missval = -32768,
+ prec = "short",
+ compression = 9
+ )
+
+ var_bioregion <- ncdf4::ncvar_def(
+ name = "vegbioregion",
+ units = "dimensionless",
+ dim = list(dim_x, dim_y),
+ longname = "Bioregion ID (brgnid_18)",
+ missval = -32768,
+ prec = "short",
+ compression = 9
+ )
+
+ var_vegtype <- ncdf4::ncvar_def(
+ name = "vegtype",
+ units = "dimensionless",
+ dim = list(dim_x, dim_y),
+ longname = "Vegetation type code (mapcode18)",
+ missval = -32768,
+ prec = "short",
+ compression = 9
+ )
+
+ # Create NetCDF file with all variables
+ unlink(output_file)
+ nc <- ncdf4::nc_create(
+ filename = output_file,
+ vars = list(var_biome, var_bioregion, var_vegtype),
+ force_v4 = TRUE
+ )
+
+ # Convert rasters to matrices, transpose to match dimension order, replace NAs with fill values
+ biome_matrix <- t(as.matrix(biome_raster, wide = TRUE))
+ biome_matrix <- as.integer(biome_matrix)
+ biome_matrix[is.na(biome_matrix)] <- -32768
+
+ bioregion_matrix <- t(as.matrix(bioregion_raster, wide = TRUE))
+ bioregion_matrix <- as.integer(bioregion_matrix)
+ bioregion_matrix[is.na(bioregion_matrix)] <- -32768
+
+ vegtype_matrix <- t(as.matrix(vegtype_raster, wide = TRUE))
+ vegtype_matrix <- as.integer(vegtype_matrix)
+ vegtype_matrix[is.na(vegtype_matrix)] <- -32768
+
+ # Write data to variables
+ ncdf4::ncvar_put(nc, var_biome, biome_matrix)
+ ncdf4::ncvar_put(nc, var_bioregion, bioregion_matrix)
+ ncdf4::ncvar_put(nc, var_vegtype, vegtype_matrix)
+
+ # Add global attributes
+ ncdf4::ncatt_put(nc, 0, "title", "Vegetation Map - Biome, Bioregion, and Vegetation Type")
+ ncdf4::ncatt_put(nc, 0, "source", "South Africa National Vegetation Map 2024")
+ ncdf4::ncatt_put(nc, 0, "history", paste0("created: ", Sys.time()))
+ ncdf4::ncatt_put(nc, 0, "crs", as.character(crs(multiband)))
+ ncdf4::ncatt_put(nc, 0, "Conventions", "CF-1.8")
+ ncdf4::ncatt_put(nc, 0, "lookup_table_json", jsonlite::toJSON(lookup_tbl, dataframe = "rows", auto_unbox = TRUE))
+
+ # Add CRS variable for CF compliance and GIS compatibility
+ crs_var <- ncdf4::ncvar_def("crs", "", list(), prec = "integer")
+ nc <- ncdf4::ncvar_add(nc, crs_var)
+
+ crs_wkt <- as.character(crs(multiband))
+# ncdf4::ncatt_put(nc, "crs", "grid_mapping_name", "albers_conical_equal_area")
+ ncdf4::ncatt_put(nc, "crs", "crs_wkt", crs_wkt)
+ ncdf4::ncatt_put(nc, "crs", "spatial_ref", crs_wkt)
+
+ # Add geotransform for GDAL compatibility
+ ncdf4::ncatt_put(nc, "crs", "GeoTransform", paste(ext$xmin, dx, 0, ext$ymax, 0, -dy))
+
+ # Add grid_mapping to data variables
+ ncdf4::ncatt_put(nc, "vegbiome", "grid_mapping", "crs")
+ ncdf4::ncatt_put(nc, "vegbioregion", "grid_mapping", "crs")
+ ncdf4::ncatt_put(nc, "vegtype", "grid_mapping", "crs")
+
+ # Close file
+ ncdf4::nc_close(nc)
+
+ return(output_file)
+}
+
+if(F){
+ test=rast(output_file)
+ plot(test)
+}
\ No newline at end of file
diff --git a/R/domain_bbox.R b/R/domain_bbox.R
new file mode 100644
index 00000000..ff64d241
--- /dev/null
+++ b/R/domain_bbox.R
@@ -0,0 +1,34 @@
+# Create buffered domain bounding box and write GeoParquet
+
+#' Create a buffered bounding box around the domain
+#'
+#' @param domain_parquet Path to domain polygon GeoParquet (output of domain_define).
+#' @param buffer_m Numeric buffer distance in meters applied to the bbox (default 50 km).
+#' @param out_file Output GeoParquet path (default data/raw/domain_bbox.parquet).
+#' @return Character path to the written GeoParquet file.
+#' @details Reads the domain polygon, builds its bounding box, converts to sf, buffers, and writes to GeoParquet.
+make_domain_bbox <- function(domain_parquet, buffer_m = 50000, out_file = "data/target_outputs/domain_bbox.parquet") {
+ domain_sf <- sfarrow::st_read_parquet(domain_parquet)
+ bbox_geom <- domain_sf |> sf::st_bbox() |> sf::st_as_sfc() |> sf::st_buffer(buffer_m)
+ bbox_sf <- sf::st_as_sf(bbox_geom)
+
+ # Ensure directory exists
+ dir.create(dirname(out_file), recursive = TRUE, showWarnings = FALSE)
+
+ # Try writing with sfarrow, fall back to sf::st_write if needed
+ tryCatch({
+ sfarrow::st_write_parquet(bbox_sf, out_file)
+ message("[domain_bbox] Wrote with sfarrow: ", out_file)
+ }, error = function(e) {
+ message("[domain_bbox] sfarrow failed, trying sf::st_write: ", conditionMessage(e))
+ sf::st_write(bbox_sf, out_file, quiet = TRUE, delete_dsn = TRUE)
+ })
+
+ # Verify file exists
+ if (!file.exists(out_file)) {
+ stop("[domain_bbox] Failed to create output file: ", out_file)
+ }
+
+ message("[domain_bbox] File created: ", out_file, " (", file.size(out_file), " bytes)")
+ out_file
+}
diff --git a/R/domain_define.R b/R/domain_define.R
index 44659341..93c5010d 100644
--- a/R/domain_define.R
+++ b/R/domain_define.R
@@ -1,54 +1,46 @@
-# Make Domain
+# Define buffered project domain
#' @author Adam M. Wilson
+#' @description Build a smoothed, buffered domain polygon from the 2018 vegetation map and country boundary, then write it to GeoParquet.
+#' @param vegmap_shp Path to the vegetation map shapefile (e.g., VEGMAP2018).
+#' @param country Path to the country boundary GeoParquet file.
+#' @return Character path to the written GeoParquet file (`data/raw/domain.parquet`).
+#' @details Filters to target biomes, unions polygons, simplifies (500 m), buffers (50 km), smooths (ksmooth, smoothness=120), intersects with country, and writes to GeoParquet.
-# Process 2018 Vegetation dataset to define project domain
+domain_define <- function(vegmap_shp, country){
-
-#' @param vegmap is the domains of interest from the 2018 national vegetation map
-#' @param vegmap_shp is the path to the 2018 national vegetation map - used to get national boundary
-#' @param buffer size of domain buffer (in m)
-
-domain_define <- function(vegmap, country){
+ # Always read country from a parquet path
+ if (!is.character(country)) {
+ stop("country must be a path to a GeoParquet file")
+ }
+ country <- sfarrow::st_read_parquet(country)
biomes = c("Fynbos")#,"Succulent Karoo")#,"Albany Thicket")
- vegmap_union=vegmap %>%
- filter(biome_18 %in% biomes ) %>% #filter to list above
+ vegmap_union=st_read(vegmap_shp) %>%
+ janitor::clean_names() %>%
+ filter(t_biome %in% biomes ) %>% #filter to list above
st_union() # union all polygons into one multipolygon, dissolving internal boundaries
-
- #buffer domain biomes
- vegmap_buffer= vegmap_union %>%
- st_simplify(dTolerance=500) %>%
- st_buffer(50000) %>%
- st_simplify(dTolerance=100)
-
-
-
-
+
+vegmap_buffer = vegmap_union %>%
+ st_simplify(dTolerance=500) %>%
+ st_buffer(50000) %>%
+ smooth(method="ksmooth",smoothness=120) #%>%
+
+country= st_as_sf(country) %>%
+ st_transform(crs=st_crs(vegmap_buffer))
+
domain <-
vegmap_buffer %>%
- st_intersection(st_transform(country,crs=st_crs(vegmap))) %>% #only keep land areas of buffer - no ocean
+ st_intersection(st_transform(country,crs=st_crs(vegmap_union))) %>% #only keep land areas of buffer - no ocean
st_as_sf() %>%
mutate(domain=1)
- #Delete file if it exists (this should be handled by the line below, but that seems to fail on github)
- if(file.exists("data/domain.gpkg")){file.remove("data/domain.gpkg")}
-
- # save the files
- st_write(domain,dsn="data/domain.gpkg", append = F, delete_layer = TRUE)# overwrite layer if it exists (caused an error in targets)
-
- #release the domain
- piggyback::pb_upload(file = "data/domain.gpkg",
- repo = "AdamWilsonLab/emma_envdata",
- tag = "raw_static",
- overwrite = TRUE)
-
- return(domain)
-
-}
-
-
-
+ # Write to GeoParquet
+ out_file <- "data/raw/domain.parquet"
+ sfarrow::st_write_parquet(domain, out_file)
+
+ return(out_file)
+}
\ No newline at end of file
diff --git a/R/domain_define_bioscape.R b/R/domain_define_bioscape.R
new file mode 100644
index 00000000..0f05139f
--- /dev/null
+++ b/R/domain_define_bioscape.R
@@ -0,0 +1,52 @@
+# Make Domain
+
+#' @author Adam M. Wilson
+
+# Process 2018 Vegetation dataset to define project domain
+
+
+#' @param vegmap is the domains of interest from the 2018 national vegetation map
+#' @param vegmap_shp is the path to the 2018 national vegetation map - used to get national boundary
+#' @param buffer size of domain buffer (in m)
+
+domain_define <- function(vegmap, country){
+
+ require(smoothr)
+
+ biomes = c("Fynbos")#,"Succulent Karoo")#,"Albany Thicket")
+
+
+ vegmap_union=vegmap %>%
+ filter(biome_18 %in% biomes ) %>% #filter to list above
+ st_union() # union all polygons into one multipolygon, dissolving internal boundaries
+
+ #buffer domain biomes
+ vegmap_buffer= vegmap_union %>%
+ st_simplify(dTolerance=500) %>%
+ st_buffer(set_units(set_units(100,km),m)) #%>%
+
+# v2<- vegmap_buffer %>%
+# smooth(method = "ksmooth",smoothness=25)
+#
+# plot(vegmap_union); plot(v2,add=T)
+
+ domain <-
+ vegmap_buffer %>%
+ smooth(method = "ksmooth",smoothness=50) %>%
+# st_intersection(st_transform(country,crs=st_crs(vegmap))) %>% #only keep land areas of buffer - no ocean
+ st_as_sf() %>%
+ mutate(domain=1) %>%
+ st_make_valid() %>%
+ st_transform(4326)
+
+ # save the files
+ st_write(domain,dsn="data/bioscape_domain.gpkg",append=F)
+ file.remove("data/bioscape_domain.geojson"); st_write(domain,dsn="data/bioscape_domain.geojson",append=F)
+
+ return(domain)
+
+}
+
+
+
+
diff --git a/R/domain_rasterize.R b/R/domain_rasterize.R
index 862c3e15..842a4274 100644
--- a/R/domain_rasterize.R
+++ b/R/domain_rasterize.R
@@ -1,28 +1,198 @@
-# Rasterize Domain
+# Rasterize Domain and Remnants
+#' @title Rasterize domain with pixel IDs, remnants, and distance to remnants
#' @author Adam M. Wilson
+#' @description Creates a multivariate NetCDF file with four variables: domain mask, pixel IDs, remnant indicators, and distance to nearest remnant. Each variable is written separately with maximum compression and CF-1.8 compliant metadata.
+#' @param domain sf or SpatVector object defining the study area (typically from domain_define).
+#' @param remnants_shp Path to remnant vegetation shapefile.
+#' @param dx Numeric x-resolution in CRS units (default 250 m).
+#' @param dy Numeric y-resolution in CRS units (default 250 m).
+#' @param out_file Character path for output NetCDF file (default "data/raw/domain.nc").
+#' @return Character path to the written NetCDF file.
+#' @details Generates a raster template from domain bounding box, rasterizes domain and remnants, computes pixel IDs (sequential within domain) and Euclidean distance to nearest remnant (in km). Writes four variables (domain, pid, remnants, remnants_distance) to NetCDF with FORMAT=NC4, COMPRESS=DEFLATE, ZLEVEL=9, SHUFFLE=YES. Adds CF-compliant metadata via ncdf4 including long_name, units, CRS, history, and Conventions attributes.
-# Rasterize domain to common grid to define the raster domain
+domain_rasterize <- function(domain, remnants_shp, dx = 250, dy = 250, out_file = "data/raw/domain.nc") {
-#' @param domain vector file of study domain
-#' @param dx x resolution
-#' @param dy y resolution
+ # Generate raster template and rasterize domain with terra (touches = TRUE)
+ domain_template <- rast(st_as_stars(st_bbox(domain), dx = dx, dy = dy))
-domain_rasterize <- function(domain,dx = 500, dy = 500){
+ domain_raster <- domain %>%
+ st_as_sf() %>%
+ mutate(domain = 1) %>%
+ vect() %>%
+ terra::rasterize(
+ x = .,
+ y = domain_template,
+ field = "domain",
+ touches = TRUE
+ )
+
+ # Ensure pixels outside domain are NA (not 0)
+ domain_raster[domain_raster == 0] <- NA
- # generate raster version of domain
- domain_template=st_as_stars(st_bbox(domain), dx = dx, dy = dy)
- domain_raster <- domain %>%
- dplyr::select(biomeid_18) %>%
- st_rasterize(template = domain_template)
+## Process remnants to add fields related to whether the cell is in a remnant and distance to remnant
- domain_raster
- #writeRaster(domain_raster,file="data/domain.tif")
+# Load remnants file
+ remnants <- st_read(remnants_shp) %>%
+ janitor::clean_names() %>%
+ st_transform(crs = crs(domain)) %>%
+ st_crop(st_as_sfc(st_bbox(domain))) #crop to domain box
+# st_union() %>%
+# st_make_valid()
-}
+ remnants_raster <- remnants %>%
+ st_as_sf() |>
+ mutate(remnant=1) %>%
+ vect() %>%
+ rasterize(x = .,
+ y = domain_raster,
+ field = "remnant",
+ touches = T,
+ cover = T)|>
+ terra::mask(mask=domain_raster)*100 #set to NA outside domain and convert to integer
+
+ remnants_distance <- remnants_raster |>
+ terra::app(fun=function(x) ifelse(is.na(x),0,1)) |>
+ terra::distance(target=1)|>
+ terra::mask(mask=domain_raster) #set to NA outside domain
+
+ # Create pixel ID raster: 1:ncell where domain=1, NA elsewhere
+ pid_raster <- domain_raster
+ pid_values <- rep(NA, ncell(pid_raster))
+ domain_cells <- which(!is.na(values(domain_raster)))
+ pid_values[domain_cells] <- seq_along(domain_cells)
+ values(pid_raster) <- pid_values
+ # Prepare layers and units for per-variable write
+ layers <- list(
+ domain = domain_raster,
+ pid = pid_raster,
+ remnants = remnants_raster,
+ remnants_distance = remnants_distance
+ )
+ units(layers$domain) <- "dimensionless"
+ units(layers$pid) <- "dimensionless"
+ units(layers$remnants) <- "dimensionless"
+ units(layers$remnants_distance) <- "meters"
+
+ # Get spatial extent and create dimensions for NetCDF
+ ext <- ext(domain_raster)
+ x_vals <- seq(ext$xmin + dx/2, ext$xmax - dx/2, by = dx)
+ y_vals <- seq(ext$ymax - dy/2, ext$ymin + dy/2, by = -dy)
+
+ # Define dimensions
+ dim_x <- ncdf4::ncdim_def(name = "easting", units = "meter", vals = x_vals, longname = "easting")
+ dim_y <- ncdf4::ncdim_def(name = "northing", units = "meter", vals = y_vals, longname = "northing")
+
+ # Define variables with optimal data types and compression
+ var_domain <- ncdf4::ncvar_def(
+ name = "domain",
+ units = "dimensionless",
+ dim = list(dim_x, dim_y),
+ longname = "Domain mask (1 = in domain, NA = outside)",
+ missval = -128,
+ prec = "byte",
+ compression = 9
+ )
+
+ var_pid <- ncdf4::ncvar_def(
+ name = "pid",
+ units = "dimensionless",
+ dim = list(dim_x, dim_y),
+ longname = "Pixel ID for domain grid cells",
+ missval = -2147483648,
+ prec = "integer",
+ compression = 9
+ )
+
+ var_remnants <- ncdf4::ncvar_def(
+ name = "remnants",
+ units = "dimensionless",
+ dim = list(dim_x, dim_y),
+ longname = "Remnant vegetation proportion (100 = full remnant, 5 = 5% remnant, NA = not remnant)",
+ missval = -128,
+ prec = "byte",
+ compression = 9
+ )
+
+ var_dist <- ncdf4::ncvar_def(
+ name = "remnants_distance",
+ units = "meters",
+ dim = list(dim_x, dim_y),
+ longname = "Distance to nearest remnant vegetation",
+ missval = -2147483648,
+ prec = "integer",
+ compression = 9
+ )
+
+ # Create NetCDF file with all variables
+unlink(out_file)
+
+ nc <- ncdf4::nc_create(
+ filename = out_file,
+ vars = list(var_domain, var_pid, var_remnants, var_dist),
+ force_v4 = TRUE
+ )
+
+ # Convert rasters to matrices and replace NAs with fill values
+ # Note: as.matrix() from terra returns (nrow, ncol), but ncdf4 expects (ncol, nrow) for (x, y) dims
+ domain_matrix <- t(as.matrix(layers$domain, wide = TRUE))
+ domain_matrix[is.na(domain_matrix)] <- -128
+
+ pid_matrix <- t(as.matrix(layers$pid, wide = TRUE))
+ pid_matrix[is.na(pid_matrix)] <- -2147483648
+
+ remnants_matrix <- t(as.matrix(layers$remnants, wide = TRUE))
+ remnants_matrix[is.na(remnants_matrix)] <- -128
+
+ dist_matrix <- t(as.matrix(layers$remnants_distance, wide = TRUE))
+ dist_matrix[is.na(dist_matrix)] <- -2147483648
+
+ # Write data to variables
+ ncdf4::ncvar_put(nc, var_domain, domain_matrix)
+ ncdf4::ncvar_put(nc, var_pid, pid_matrix)
+ ncdf4::ncvar_put(nc, var_remnants, remnants_matrix)
+ ncdf4::ncvar_put(nc, var_dist, dist_matrix)
+
+ # Add global attributes
+ ncdf4::ncatt_put(nc, 0, "title", "Rasterized domain with remnants and distance")
+ ncdf4::ncatt_put(nc, 0, "history", paste0("created: ", Sys.time()))
+ ncdf4::ncatt_put(nc, 0, "Conventions", "CF-1.8")
+
+ # Add CRS variable with comprehensive attributes for GIS compatibility
+ crs_var <- ncdf4::ncvar_def("crs", "", list(), prec = "integer")
+ nc <- ncdf4::ncvar_add(nc, crs_var)
+
+ # Get CRS as WKT string (most reliable for terra)
+ crs_wkt <- as.character(crs(domain_raster))
+
+ # Add CRS attributes
+ ncdf4::ncatt_put(nc, "crs", "grid_mapping_name", "albers_conical_equal_area")
+ ncdf4::ncatt_put(nc, "crs", "crs_wkt", crs_wkt)
+ ncdf4::ncatt_put(nc, "crs", "spatial_ref", crs_wkt)
+
+ # Add geotransform for GDAL compatibility
+ ext_vals <- ext(domain_raster)
+ geotransform <- paste(ext_vals$xmin, dx, 0, ext_vals$ymax, 0, -dy)
+ ncdf4::ncatt_put(nc, "crs", "GeoTransform", geotransform)
+
+ # Add grid_mapping attribute to all data variables
+ ncdf4::ncatt_put(nc, "domain", "grid_mapping", "crs")
+ ncdf4::ncatt_put(nc, "pid", "grid_mapping", "crs")
+ ncdf4::ncatt_put(nc, "remnants", "grid_mapping", "crs")
+ ncdf4::ncatt_put(nc, "remnants_distance", "grid_mapping", "crs")
+
+ # Close file
+ ncdf4::nc_close(nc)
+
+ out_file
+}
+if(F){
+test=rast(out_file)
+plot(test$domain)
+}
\ No newline at end of file
diff --git a/R/download_vegmap_release.R b/R/download_vegmap_release.R
new file mode 100644
index 00000000..a3648164
--- /dev/null
+++ b/R/download_vegmap_release.R
@@ -0,0 +1,46 @@
+#' Download vegetation map release and return shapefile path
+#'
+#' Downloads a zipped vegetation map from a GitHub release using piggyback,
+#' unzips it into a local directory, and returns the path to the `.shp` file
+#' for use in targets.
+#'
+#' @param repo character. GitHub repository in "owner/repo" format.
+#' @param tag character. Release tag (e.g., "latest" or "v1.0.0").
+#' @param file character. Name of the release asset file to download (e.g., "vegmap.zip").
+#' @param local_dir character. Local directory to store the unzipped files.
+#' @param shapefile_name character. Name of the shapefile to return (e.g., "NVM2024Final_IEM5_12_07012025.shp").
+#'
+#' @return character. Full path to the shapefile on disk.
+#'
+#' @details If the shapefile already exists at `local_dir`, no download
+#' is performed. Otherwise, the zip file is downloaded via piggyback and extracted.
+#'
+#'
+#' @importFrom piggyback pb_download
+#' @importFrom utils unzip
+#' @export
+download_vegmap_release <- function(repo, tag, file, local_dir, shapefile_name) {
+ dir.create(local_dir, recursive = TRUE, showWarnings = FALSE)
+
+ # Check if shapefile already exists in the expected location (with shapefile subdirectory)
+ shp_file_correct <- file.path(local_dir, "shapefile", shapefile_name)
+
+ if (!file.exists(shp_file_correct)) {
+ message("Downloading vegmap from GitHub release using piggyback...")
+ piggyback::pb_download(
+ file = file,
+ repo = repo,
+ tag = tag,
+ dest = local_dir,
+ overwrite = FALSE
+ )
+ message("Unzipping vegmap...")
+ list.files(local_dir,recursive = T)
+ zip_file <- file.path(local_dir, file)
+ utils::unzip(zip_file, exdir = local_dir)
+ unlink(zip_file)
+ }
+
+ # Return the correct path (shapefile is in a subdirectory after extraction)
+ shp_file_correct
+}
diff --git a/R/get_country.R b/R/get_country.R
new file mode 100644
index 00000000..e738ec9a
--- /dev/null
+++ b/R/get_country.R
@@ -0,0 +1,34 @@
+# National Boundary
+
+#' @author Adam M. Wilson
+#' @description Download national boundary file from the UN
+#' @source https://data.humdata.org/dataset/cod-ab-zaf
+
+get_country <- function(){
+
+ #Adjust timeout to allow for slow internet
+ if(getOption('timeout') < 1000){
+ options(timeout = 1000)
+ }
+
+ url="https://data.humdata.org/dataset/061d4492-56e8-458c-a3fb-e7950991adf0/resource/37175ff4-41a3-4753-a2c3-ced24142a96c/download/zaf_admin_boundaries.geojson.zip"
+ tmpfile1=tempfile()
+ tmpdir1=tempdir()
+ download.file(url,destfile = tmpfile1)
+ unzip(tmpfile1,exdir=tmpdir1)
+
+ # Read the converted GeoJSON, union, and convert to sf
+ country <- st_read(file.path(tmpdir1, "zaf_admin0.geojson"), quiet = TRUE) |>
+ st_union() |>
+ st_as_sf()
+
+ # Write to GeoParquet
+ out_file <- "data/target_outputs/country.parquet"
+ sfarrow::st_write_parquet(country, out_file)
+
+ return(out_file)
+}
+# end function
+
+
+
diff --git a/R/get_elevation.R b/R/get_elevation.R
new file mode 100644
index 00000000..2fe3214f
--- /dev/null
+++ b/R/get_elevation.R
@@ -0,0 +1,190 @@
+#' @title Download NASADEM elevation via AppEEARS and resample to domain
+#' @description Submits an AppEEARS area request for NASADEM elevation data
+#' over the provided domain polygon, downloads, and resamples to domain grid.
+#' @author EMMA Team
+#' @param domain_vector A SpatVector or sf polygon defining the domain boundary
+#' @param domain_raster A SpatRaster (domain.tif) defining the output grid and mask
+#' @param temp_directory Temporary working directory for downloads
+#' @param verbose Logical for progress messages
+#' @return SpatRaster with elevation resampled to domain, with metadata
+
+get_elevation <- function(
+ domain_vector,
+ domain_raster,
+ temp_directory = "data/temp/raw_data/elevation_nasadem/",
+ out_file = "data/raw/elevation_nasadem.nc",
+ verbose = TRUE
+) {
+
+
+ # Ensure clean temp directory
+ unlink(temp_directory, recursive = TRUE, force = TRUE)
+ dir.create(temp_directory, recursive = TRUE, showWarnings = FALSE)
+
+ # Clean terra temp
+ terra_tmp <- file.path(getwd(), "data/temp/terra")
+ unlink(terra_tmp, recursive = TRUE, force = TRUE)
+ dir.create(terra_tmp, recursive = TRUE, showWarnings = FALSE)
+ terraOptions(tempdir = terra_tmp, memfrac = 0.8)
+
+ # Convert domain vector to sf, fix geometry, simplify, merge, and reproject to WGS84 (required by AppEEARS)
+ domain_sf <- st_as_sf(domain_vector) %>%
+ st_simplify(dTolerance = 100, preserveTopology = TRUE) %>%
+ st_buffer(0) %>%
+ st_make_valid() %>%
+ st_transform(crs = 4326)%>%
+ geojsonsf::sf_geojson(simplify = FALSE)%>%
+ jsonlite::fromJSON()
+
+# if (!all(st_is_valid(st_as_sf(domain_sf)))) stop("Domain polygon still invalid after repair; inspect input geometry.")
+
+
+ # Build AppEEARS request with proper structure
+ req <- list(
+ task_type = "area",
+ task_name = paste0("NASADEM_", format(Sys.time(), "%Y%m%d%H%M%S")),
+ params = list(
+ dates = list(list(
+ startDate = "02-11-2000",
+ endDate = "02-11-2000"
+ )),
+ layers = list(list(
+ product = "SRTMGL3_NC.003",
+ layer = "SRTMGL3_DEM"
+ )),
+ output = list(
+ format = list(type = "netcdf4"),
+ projection = "native"
+ ),
+ geo = domain_sf
+ )
+ )
+
+ # Submit and poll for completion
+ if (verbose) message("Submitting AppEEARS task...")
+ task <- appeears::rs_request(
+ request = req,
+ user = Sys.getenv("EARTHDATA_USER"),
+ path = temp_directory,
+ transfer = FALSE,
+ verbose = verbose
+ )
+
+ if (verbose) message("Task submitted: ", task$get_task_id())
+
+ # Poll for completion using task object methods
+ max_retries <- 60
+ retry_count <- 0
+
+ repeat {
+ retry_count <- retry_count + 1
+ task$update_status(verbose = FALSE)
+
+ if (task$is_success()) {
+ if (verbose) message("Task completed successfully")
+ break
+ }
+
+ if (task$is_failed()) {
+ stop("AppEEARS task failed")
+ }
+
+ if (retry_count >= max_retries) {
+ stop("Task polling timed out after ", max_retries * 10, " seconds")
+ }
+
+ if (verbose) message("Task status: ", task$get_status(), " (", retry_count, "/", max_retries, ")")
+ Sys.sleep(60)
+ }
+
+ # Download results
+ if (verbose) message("Downloading files for task: ", task$get_task_id())
+ task$download(verbose = verbose)
+
+ # Load the NetCDF file
+ nc_paths <- list.files(temp_directory, pattern = "\\.nc$", full.names = TRUE, recursive = TRUE)
+ if (length(nc_paths) == 0) {
+ stop("No NetCDF files downloaded from AppEEARS")
+ }
+
+ if (verbose) message("Reading elevation data from: ", nc_paths[1])
+ elev_raster <- terra::rast(nc_paths[grepl(nc_paths, pattern = "SRTMGL3_NC.003_90m_aid0001.nc")])
+
+ # Ensure we have a SpatRaster template (accept path or raster)
+ domain_template <- if (is.character(domain_raster)) terra::rast(domain_raster) else domain_raster
+
+ # Project to domain CRS/grid (bilinear) and mask to domain
+ if (verbose) message("Projecting elevation to domain CRS/grid")
+ elev_on_grid <- terra::project(elev_raster, domain_template, method = "average")
+
+ # Mask to domain (NA where domain is NA)
+ mask_layer <- if ("domain" %in% names(domain_template)) domain_template[["domain"]] else domain_template
+ elev_masked <- terra::mask(elev_on_grid, mask_layer)
+
+ # Set metadata
+ names(elev_masked) <- "elevation"
+
+ metags(elev_masked) <- c(
+ "elevation_long_name" = "NASADEM elevation above mean sea level",
+ "elevation_source" = "NASADEM_HGT.001 via AppEEARS",
+ "units" = "meters",
+ "date_generated" = as.character(Sys.time()),
+ "crs" = as.character(st_crs(elev_masked)),
+ "Conventions" = "CF-1.8"
+ )
+
+ # Write NetCDF with compression and CF metadata
+ dir.create(dirname(out_file), recursive = TRUE, showWarnings = FALSE)
+ unlink(out_file)
+
+ ext_vals <- ext(elev_masked)
+ dx <- res(elev_masked)[1]
+ dy <- res(elev_masked)[2]
+ x_vals <- seq(ext_vals$xmin + dx/2, ext_vals$xmax - dx/2, by = dx)
+ y_vals <- seq(ext_vals$ymax - dy/2, ext_vals$ymin + dy/2, by = -dy)
+
+ dim_x <- ncdf4::ncdim_def(name = "easting", units = "meter", vals = x_vals, longname = "easting")
+ dim_y <- ncdf4::ncdim_def(name = "northing", units = "meter", vals = y_vals, longname = "northing")
+
+ var_elev <- ncdf4::ncvar_def(
+ name = "elevation",
+ units = "meters",
+ dim = list(dim_x, dim_y),
+ longname = "NASADEM elevation above mean sea level",
+ missval = -3.4e38,
+ prec = "float",
+ compression = 9
+ )
+
+ nc <- ncdf4::nc_create(filename = out_file, vars = list(var_elev), force_v4 = TRUE)
+
+ elev_matrix <- t(as.matrix(elev_masked, wide = TRUE))
+ elev_matrix[is.na(elev_matrix)] <- -3.4e38
+ ncdf4::ncvar_put(nc, var_elev, elev_matrix)
+
+ crs_wkt <- as.character(crs(elev_masked))
+ crs_var <- ncdf4::ncvar_def("crs", "", list(), prec = "integer")
+ nc <- ncdf4::ncvar_add(nc, crs_var)
+ ncdf4::ncatt_put(nc, "crs", "crs_wkt", crs_wkt)
+ ncdf4::ncatt_put(nc, "crs", "spatial_ref", crs_wkt)
+ ncdf4::ncatt_put(nc, "crs", "GeoTransform", paste(ext_vals$xmin, dx, 0, ext_vals$ymax, 0, -dy))
+ ncdf4::ncatt_put(nc, "elevation", "grid_mapping", "crs")
+
+ ncdf4::ncatt_put(nc, 0, "title", "NASADEM elevation resampled to domain")
+ ncdf4::ncatt_put(nc, 0, "source", "NASADEM_HGT.001 via AppEEARS")
+ ncdf4::ncatt_put(nc, 0, "history", paste0("created: ", Sys.time()))
+ ncdf4::ncatt_put(nc, 0, "Conventions", "CF-1.8")
+
+ ncdf4::nc_close(nc)
+
+ # Cleanup
+ unlink(temp_directory, recursive = TRUE, force = TRUE)
+ gc()
+ unlink(terra_tmp, recursive = TRUE, force = TRUE)
+
+ out_file
+}
+
+
+
+
diff --git a/R/get_release_climate_chelsa.R b/R/get_release_climate_chelsa.R
index 23c8d1eb..55c593c3 100644
--- a/R/get_release_climate_chelsa.R
+++ b/R/get_release_climate_chelsa.R
@@ -1,8 +1,9 @@
#R script to download climate data (CHELSA)
library(terra)
+library(ncdf4)
-#' @author Brian Maitner
+#' @author Brian Maitner & Adam Wilson
#' @description This function will download CHELSA climate data if it isn't present, and (invisibly) return a NULL if it is present
#' @param temp_directory Where to save the files, defaults to "data/raw_data/climate_chelsa/"
#' @param domain domain (sf polygon) used for masking
@@ -47,32 +48,52 @@ get_release_climate_chelsa <- function(temp_directory = "data/temp/raw_data/clim
domain_tf <-
domain %>%
+ st_as_sf() %>%
sf::st_transform(crs("+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0"))
# Download the data
# Note that it would be useful to clip these to a polygon to save space
# It would also be useful if only the relevant data could be downloaded (rather than downloading and THEN pruning)
- bio_vec <-
- c("1","2","3","4","5","6","7","8","9",
- "10","11","12","13","14","15","16","17","18","19")
-
- for(i in bio_vec){
-
- # download files
- # download.file(url = paste("https://os.zhdk.cloud.switch.ch/envicloud/chelsa/chelsa_V1/climatologies/bio/CHELSA_bio10_",i,".tif",sep = ""),
- # destfile = file.path(temp_directory,paste("CHELSA_bio10_",i,"_V1.2.tif",sep = ""))
- # )
-
- # https://os.zhdk.cloud.switch.ch/chelsav2/GLOBAL/climatologies/1981-2010/bio/CHELSA_bio1_1981-2010_V.2.1.tif
- robust_download_file(url = paste("https://os.zhdk.cloud.switch.ch/chelsav2/GLOBAL/climatologies/1981-2010/bio/CHELSA_bio",i,"_1981-2010_V.2.1.tif",sep = ""),
- destfile = file.path(temp_directory,paste("CHELSA_bio",i,"_1981-2010_V.2.1.tif",sep = "")),
+ # CF-compliant metadata for CHELSA bioclimatic variables
+ bio_metadata <- tribble(
+ ~bio_name, ~long_name, ~units,
+ "bio01", "Annual Mean Temperature", "°C * 10",
+ "bio02", "Mean Diurnal Range", "°C * 10",
+ "bio03", "Isothermality", "%",
+ "bio04", "Temperature Seasonality", "°C * 10",
+ "bio05", "Max Temperature of Warmest Month", "°C * 10",
+ "bio06", "Min Temperature of Coldest Month", "°C * 10",
+ "bio07", "Temperature Annual Range", "°C * 10",
+ "bio08", "Mean Temperature of Wettest Quarter", "°C * 10",
+ "bio09", "Mean Temperature of Driest Quarter", "°C * 10",
+ "bio10", "Mean Temperature of Warmest Quarter", "°C * 10",
+ "bio11", "Mean Temperature of Coldest Quarter", "°C * 10",
+ "bio12", "Annual Precipitation", "mm",
+ "bio13", "Precipitation of Wettest Month", "mm",
+ "bio14", "Precipitation of Driest Month", "mm",
+ "bio15", "Precipitation Seasonality", "%",
+ "bio16", "Precipitation of Wettest Quarter", "mm",
+ "bio17", "Precipitation of Driest Quarter", "mm",
+ "bio18", "Precipitation of Warmest Quarter", "mm",
+ "bio19", "Precipitation of Coldest Quarter", "mm"
+ )
+
+ # Record download date
+ download_date <- Sys.Date()
+
+ for(idx in 1:nrow(bio_metadata)){
+ i <- bio_metadata$bio_name[idx]
+
+# Download the file
+ robust_download_file(url = paste("https://os.unil.cloud.switch.ch/chelsa02/chelsa/global/bioclim/",i,"/1981-2010/CHELSA_bio",sprintf("%02d", idx),"_1981-2010_V.2.1.tif",sep = ""),
+ destfile = file.path(temp_directory,paste("CHELSA_bio",sprintf("%02d", idx),"_1981-2010_V.2.1.tif",sep = "")),
max_attempts = 10,
sleep_time = 10
)
# load
- rast_i <- terra::rast(file.path(temp_directory,paste("CHELSA_bio",i,"_1981-2010_V.2.1.tif",sep = "")))
+ rast_i <- terra::rast(file.path(temp_directory,paste("CHELSA_bio",sprintf("%02d", idx),"_1981-2010_V.2.1.tif",sep = "")))
# crop
@@ -84,21 +105,52 @@ get_release_climate_chelsa <- function(temp_directory = "data/temp/raw_data/clim
terra::mask(rast_i,
mask = terra::vect(domain_tf))
- # save raster
- terra::writeRaster(x = rast_i,
- filename = file.path(temp_directory,paste("CHELSA_bio",i,"_1981-2010_V.2.1.tif",sep = "")),
- overwrite = TRUE)
-
- # plot
- # plot(rast_i)
- # plot(domain_tf,add=TRUE,col=NA)
+ # Write as NetCDF with CF-compliant metadata
+ nc_filename <- file.path(temp_directory, paste("CHELSA_", i, "_1981-2010_V.2.1.nc", sep = ""))
+
+ # Use terra's writeCDF function which creates NetCDF4 files
+ terra::writeCDF(x = rast_i,
+ filename = nc_filename,
+ overwrite = TRUE,
+ compression = 9)
+
+ # Add CF-compliant metadata using ncdf4 package
+ nc_file <- ncdf4::nc_open(nc_filename, write = TRUE)
+
+ # Get variable name (should be the first variable in the file)
+ var_name <- names(rast_i)
+ if (is.null(var_name) || var_name == "") {
+ var_name <- i
+ }
+
+ # Get metadata for this bioclimatic variable
+ long_name <- bio_metadata$long_name[idx]
+ units <- bio_metadata$units[idx]
+
+ # Add global attributes
+ ncdf4::ncatt_put(nc_file, 0, "title",
+ paste("CHELSA Bioclimatic Variable", i, sep = " "))
+ ncdf4::ncatt_put(nc_file, 0, "source", "CHELSA v.2.1 (Climatologies at high resolution for the earth land areas)")
+ ncdf4::ncatt_put(nc_file, 0, "dataset_url", "https://chelsa-climate.org/")
+ ncdf4::ncatt_put(nc_file, 0, "download_date", as.character(download_date))
+ ncdf4::ncatt_put(nc_file, 0, "temporal_range", "1981-2010")
+ ncdf4::ncatt_put(nc_file, 0, "Conventions", "CF-1.8")
+ ncdf4::ncatt_put(nc_file, 0, "history",
+ paste("Downloaded on", as.character(download_date),
+ "and clipped to domain. Processed using terra and ncdf4 R packages. "))
+
+ # Add variable attributes (long_name and units)
+ ncdf4::ncatt_put(nc_file, 1, "long_name", long_name)
+ ncdf4::ncatt_put(nc_file, 1, "units", units)
+ ncdf4::ncatt_put(nc_file, 1, "standard_name", paste("bioclimatic_variable_", i, sep = ""))
+
+ ncdf4::nc_close(nc_file)
rm(rast_i)
}
- rm(i,bio_vec)
-
+ rm(i)
# release
to_release <-
@@ -111,13 +163,16 @@ get_release_climate_chelsa <- function(temp_directory = "data/temp/raw_data/clim
to_release[grepl(pattern = "CHELSA",
ignore.case = TRUE,
x = basename(to_release))]
+
+ # Filter for NetCDF files only
+ to_release <- to_release[grepl(pattern = "\\.nc$", x = to_release)]
- pb_upload(repo = "AdamWilsonLab/emma_envdata",
- file = to_release,
- tag = tag)
+ # pb_upload(repo = "AdamWilsonLab/emma_envdata",
+ # file = to_release,
+ # tag = tag)
# delete directory and contents
- unlink(x = file.path(temp_directory), recursive = TRUE, force = TRUE)
+ # unlink(x = file.path(temp_directory), recursive = TRUE, force = TRUE)
diff --git a/R/get_release_clouds_wilson.R b/R/get_release_clouds_wilson.R
index b538a5c4..47a4cfca 100644
--- a/R/get_release_clouds_wilson.R
+++ b/R/get_release_clouds_wilson.R
@@ -96,15 +96,15 @@ get_release_clouds_wilson <- function(temp_directory = "data/temp/raw_data/cloud
# Push release
- pb_upload(file = file.path(temp_directory, filename),
- repo = "AdamWilsonLab/emma_envdata",
- tag = tag,
- name = filename,
- overwrite = TRUE)
+ # pb_upload(file = file.path(temp_directory, filename),
+ # repo = "AdamWilsonLab/emma_envdata",
+ # tag = tag,
+ # name = filename,
+ # overwrite = TRUE)
# Delete file
- file.remove(file.path(temp_directory, filename))
+ # file.remove(file.path(temp_directory, filename))
# pause to keep github happy
Sys.sleep(sleep_time)
diff --git a/R/get_release_fire_modis_appeears.R b/R/get_release_fire_modis_appeears.R
new file mode 100644
index 00000000..c54587e7
--- /dev/null
+++ b/R/get_release_fire_modis_appeears.R
@@ -0,0 +1,210 @@
+#' @title Download MODIS Fire via AppEEARS and publish monthly NetCDF
+#' @description Alternative to rgee-based downloader. Submits an AppEEARS area request
+#' for MCD64A1.061 Burn Date over the provided domain and date range, downloads NetCDF
+#' outputs, splits to monthly NetCDF files, and uploads them to GitHub Releases.
+#' @author EMMA Team
+#' @param temp_directory Temporary working directory for downloads and intermediate files.
+#' @param tag Release tag to upload monthly NetCDFs to (e.g., "raw_fire_modis_nc").
+#' @param domain An `sf` polygon defining the area of interest.
+#' @param sleep_time Seconds to sleep between uploads to avoid rate limiting.
+#' @param start_date Optional ISO date (YYYY-MM-DD). If NULL, inferred from existing releases.
+#' @param end_date Optional ISO date (YYYY-MM-DD). Defaults to `Sys.Date()`.
+#' @param earthdata_user NASA Earthdata username. Defaults to `Sys.getenv("EARTHDATA_USER")`.
+#' @param earthdata_password NASA Earthdata password. Defaults to `Sys.getenv("EARTHDATA_PASSWORD")`.
+#' @param max_layers Maximum number of monthly files to process in one run. NULL for all.
+#' @param verbose Logical for progress messages.
+#' @return Character string of the latest YYYY-MM successfully uploaded, or NULL if nothing new.
+#' @importFrom piggyback pb_list pb_upload pb_new_release
+#' @importFrom terra rast time writeCDF
+#' @importFrom sf st_write st_is_longlat st_transform st_crs
+get_release_fire_modis_appeears <- function(
+ temp_directory = "data/temp/raw_data/fire_modis/",
+ tag = "raw_fire_modis_nc",
+ domain,
+ sleep_time = 1,
+ start_date = NULL,
+ end_date = as.character(Sys.Date()),
+ earthdata_user = Sys.getenv("EARTHDATA_USER"),
+ earthdata_password = Sys.getenv("EARTHDATA_PASSWORD"),
+ max_layers = NULL,
+ verbose = TRUE
+) {
+
+ # Package checks
+ required_pkgs <- c("appeears", "terra", "sf", "piggyback", "lubridate", "jsonlite", "dplyr")
+ missing <- required_pkgs[!sapply(required_pkgs, requireNamespace, quietly = TRUE)]
+ if (length(missing)) {
+ stop("Required packages missing: ", paste(missing, collapse = ", "),
+ ". Install with: install.packages(c('", paste(missing, collapse = "', '"), "'))")
+ }
+
+ if (earthdata_user == "") {
+ stop("EARTHDATA_USER not found. Set EARTHDATA_USER env var and configure ~/.netrc with password.")
+ }
+
+ # Ensure clean temp directory
+ if (dir.exists(temp_directory)) {
+ unlink(temp_directory, recursive = TRUE, force = TRUE)
+ }
+ dir.create(temp_directory, recursive = TRUE, showWarnings = FALSE)
+
+ # Ensure release exists
+ tryCatch(
+ piggyback::pb_new_release(repo = "AdamWilsonLab/emma_envdata", tag = tag),
+ error = function(e) {
+ if (verbose) message("Release ", tag, " already exists")
+ }
+ )
+
+ # Determine start_date from existing release assets if not provided
+ released_files <- piggyback::pb_list(repo = "AdamWilsonLab/emma_envdata")
+ existing_nc <- released_files[released_files$tag == tag & grepl("\\.nc$", released_files$file_name), , drop = FALSE]
+
+ parse_month_from_name <- function(x) {
+ # expects names like fire_MCD64A1_YYYY-MM.nc or YYYY-MM.nc
+ m <- sub(".*([0-9]{4}-[0-9]{2})\\.nc$", "\\1", x)
+ if (grepl("^[0-9]{4}-[0-9]{2}$", m)) return(m) else return(NA_character_)
+ }
+
+ if (is.null(start_date)) {
+ months_done <- vapply(existing_nc$file_name, parse_month_from_name, character(1))
+ months_done <- months_done[!is.na(months_done)]
+ if (length(months_done) == 0) {
+ start_date <- "2000-11-01" # MODIS Terra fire start
+ } else {
+ # next day after last completed month
+ last_month <- max(months_done)
+ start_date <- as.character(lubridate::ceiling_date(as.Date(paste0(last_month, "-01")), unit = "month"))
+ }
+ }
+
+ if (verbose) message("AppEEARS Fire request from ", start_date, " to ", end_date)
+
+ # Authentication via ~/.netrc (automatically used by appeears package)
+ if (verbose) message("Using EARTHDATA_USER: ", earthdata_user)
+
+ # Ensure domain is in WGS84 and write to GeoJSON for the request
+ dom <- domain
+ if (!sf::st_is_longlat(dom)) {
+ if (is.na(sf::st_crs(dom))) stop("'domain' must have a valid CRS.")
+ dom <- sf::st_transform(dom, 4326)
+ }
+ aoi_path <- file.path(temp_directory, "aoi.geojson")
+ suppressWarnings(sf::st_write(dom, aoi_path, driver = "GeoJSON", delete_dsn = TRUE, quiet = TRUE))
+ aoi_json <- jsonlite::read_json(aoi_path, simplifyVector = FALSE)
+
+ # Resolve Burn Date layer name dynamically
+ burn_layer <- NULL
+ try({
+ lyr <- appeears::rs_layers("MCD64A1.061")
+ cand_cols <- intersect(c("Layer", "Name", "layer", "name"), names(lyr))
+ if (length(cand_cols)) {
+ vals <- unlist(lapply(cand_cols, function(cc) lyr[[cc]]))
+ burn_layer <- vals[grepl("Burn.*Date", vals, ignore.case = TRUE)][1]
+ }
+ }, silent = TRUE)
+ if (is.null(burn_layer) || is.na(burn_layer)) burn_layer <- "Burn_Date"
+
+ if (verbose) message("Using layer: ", burn_layer)
+
+ # Build request payload (area extract)
+ req <- list(
+ task_type = "area",
+ task_name = paste0("emma_fire_", format(Sys.time(), "%Y%m%d%H%M%S")),
+ params = list(
+ dates = list(start = as.character(start_date), end = as.character(end_date)),
+ layers = list(
+ list(product = "MCD64A1.061", layer = burn_layer),
+ list(product = "MCD64A1.061", layer = "QA")
+ ),
+ output = list(format = "netcdf4", projection = "native"),
+ geo = aoi_json
+ )
+ )
+
+ # Submit, poll, and download
+ task <- appeears::rs_request(request = req)
+ if (verbose) message("Submitted AppEEARS task: ", task$task_id)
+
+ # Polling loop
+ repeat {
+ st <- appeears::rs_status(task$task_id)
+ if (isTRUE(tolower(st$status) %in% c("done", "complete", "completed"))) break
+ if (isTRUE(tolower(st$status) %in% c("error", "failed"))) stop("AppEEARS task failed.")
+ Sys.sleep(30)
+ if (verbose) message("Waiting for AppEEARS task... status: ", st$status)
+ }
+
+ # Download results (often ZIPs)
+ dl_paths <- appeears::rs_download(task_id = task$task_id, path = temp_directory)
+ zips <- list.files(temp_directory, pattern = "\\.zip$", full.names = TRUE, recursive = TRUE)
+ if (length(zips)) {
+ for (z in zips) utils::unzip(z, exdir = temp_directory)
+ }
+
+ # Collect NetCDFs
+ nc_paths <- list.files(temp_directory, pattern = "\\.nc$", full.names = TRUE, recursive = TRUE)
+ if (length(nc_paths) == 0) {
+ if (verbose) message("No NetCDF files downloaded.")
+ return(invisible(NULL))
+ }
+
+ # Helper: write monthly subsets from a multi-time NetCDF
+ write_monthly_netcdf <- function(nc_file, out_dir) {
+ r <- terra::rast(nc_file)
+ tt <- try(terra::time(r), silent = TRUE)
+ if (inherits(tt, "try-error") || is.null(tt) || length(tt) == 0) {
+ # No time axis; write as-is with month from end_date
+ out <- file.path(out_dir, sprintf("fire_MCD64A1_%s.nc", format(as.Date(end_date), "%Y-%m")))
+ terra::writeCDF(r, filename = out, varname = "Burn_Date", overwrite = TRUE)
+ return(out)
+ }
+ months <- unique(format(as.Date(tt), "%Y-%m"))
+ outs <- character(0)
+ for (m in months) {
+ idx <- which(format(as.Date(tt), "%Y-%m") == m)
+ if (length(idx) == 0) next
+ r_m <- r[[idx]]
+ out <- file.path(out_dir, sprintf("fire_MCD64A1_%s.nc", m))
+ terra::writeCDF(r_m, filename = out, varname = "Burn_Date", overwrite = TRUE)
+ outs <- c(outs, out)
+ }
+ outs
+ }
+
+ monthly_files <- unique(unlist(lapply(nc_paths, write_monthly_netcdf, out_dir = temp_directory)))
+ monthly_files <- monthly_files[file.exists(monthly_files)]
+ if (length(monthly_files) == 0) {
+ if (verbose) message("No monthly NetCDF files prepared.")
+ return(invisible(NULL))
+ }
+
+ # Apply max_layers limit if specified
+ if (!is.null(max_layers) && length(monthly_files) > max_layers) {
+ if (verbose) message("Limiting to ", max_layers, " files out of ", length(monthly_files))
+ monthly_files <- monthly_files[1:max_layers]
+ }
+
+ # Remove any duplicates already in release
+ existing_names <- existing_nc$file_name
+ to_upload <- monthly_files[!basename(monthly_files) %in% existing_names]
+ if (length(to_upload) == 0) {
+ if (verbose) message("Releases already up to date for tag ", tag)
+ latest <- vapply(existing_names, parse_month_from_name, character(1))
+ return(invisible(max(latest[!is.na(latest)])))
+ }
+
+ # Upload each file
+ for (f in to_upload) {
+ Sys.sleep(sleep_time)
+ piggyback::pb_upload(file = f, repo = "AdamWilsonLab/emma_envdata", tag = tag)
+ if (verbose) message("Uploaded ", basename(f), " to ", tag)
+ }
+
+ latest_month <- max(sub(".*([0-9]{4}-[0-9]{2})\\.nc$", "\\1", basename(to_upload)))
+
+ # Clean temp
+ unlink(temp_directory, recursive = TRUE, force = TRUE)
+
+ invisible(latest_month)
+}
diff --git a/R/get_release_ndvi_evi_modis_appeears.R b/R/get_release_ndvi_evi_modis_appeears.R
new file mode 100644
index 00000000..d0c50022
--- /dev/null
+++ b/R/get_release_ndvi_evi_modis_appeears.R
@@ -0,0 +1,211 @@
+#' @title Download MODIS NDVI and EVI via AppEEARS and publish monthly NetCDF
+#' @description Submits an AppEEARS area request for MOD13A1.061 NDVI, EVI, and QA
+#' over the provided domain and date range, downloads NetCDF outputs, splits to
+#' monthly NetCDF files, and uploads them to GitHub Releases.
+#' @author EMMA Team
+#' @param temp_directory Temporary working directory for downloads and intermediate files.
+#' @param tag Release tag to upload monthly NetCDFs to (e.g., "raw_ndvi_evi_modis_nc").
+#' @param domain An `sf` polygon defining the area of interest.
+#' @param sleep_time Seconds to sleep between uploads to avoid rate limiting.
+#' @param start_date Optional ISO date (YYYY-MM-DD). If NULL, inferred from existing releases.
+#' @param end_date Optional ISO date (YYYY-MM-DD). Defaults to `Sys.Date()`.
+#' @param earthdata_user NASA Earthdata username. Defaults to `Sys.getenv("EARTHDATA_USER")`.
+#' @param earthdata_password NASA Earthdata password. Defaults to `Sys.getenv("EARTHDATA_PASSWORD")`.
+#' @param max_layers Maximum number of monthly files to process in one run. NULL for all.
+#' @param verbose Logical for progress messages.
+#' @return Character string of the latest YYYY-MM successfully uploaded, or NULL if nothing new.
+get_release_ndvi_evi_modis_appeears <- function(
+ temp_directory = "data/temp/raw_data/ndvi_evi_modis/",
+ tag = "raw_ndvi_evi_modis_nc",
+ domain,
+ sleep_time = 1,
+ start_date = NULL,
+ end_date = as.character(Sys.Date()),
+ earthdata_user = Sys.getenv("EARTHDATA_USER"),
+ earthdata_password = Sys.getenv("EARTHDATA_PASSWORD"),
+ max_layers = NULL,
+ verbose = TRUE
+) {
+
+ # Package checks
+ required_pkgs <- c("appeears", "terra", "sf", "piggyback", "lubridate", "jsonlite", "dplyr")
+ missing <- required_pkgs[!sapply(required_pkgs, requireNamespace, quietly = TRUE)]
+ if (length(missing)) {
+ stop("Required packages missing: ", paste(missing, collapse = ", "))
+ }
+
+ if (earthdata_user == "") {
+ stop("EARTHDATA_USER not found. Set EARTHDATA_USER env var and configure ~/.netrc with password.")
+ }
+
+ # Ensure clean temp directory
+ if (dir.exists(temp_directory)) {
+ unlink(temp_directory, recursive = TRUE, force = TRUE)
+ }
+ dir.create(temp_directory, recursive = TRUE, showWarnings = FALSE)
+
+ # Ensure release exists
+ tryCatch(
+ piggyback::pb_new_release(repo = "AdamWilsonLab/emma_envdata", tag = tag),
+ error = function(e) {
+ if (verbose) message("Release ", tag, " already exists")
+ }
+ )
+
+ # Determine start_date from existing release assets
+ released_files <- piggyback::pb_list(repo = "AdamWilsonLab/emma_envdata")
+ existing_nc <- released_files[released_files$tag == tag & grepl("\\.nc$", released_files$file_name), , drop = FALSE]
+
+ parse_month_from_name <- function(x) {
+ m <- sub(".*([0-9]{4}-[0-9]{2})\\.nc$", "\\1", x)
+ if (grepl("^[0-9]{4}-[0-9]{2}$", m)) return(m) else return(NA_character_)
+ }
+
+ if (is.null(start_date)) {
+ months_done <- vapply(existing_nc$file_name, parse_month_from_name, character(1))
+ months_done <- months_done[!is.na(months_done)]
+ if (length(months_done) == 0) {
+ start_date <- "2000-02-18" # MODIS Terra start
+ } else {
+ last_month <- max(months_done)
+ start_date <- as.character(lubridate::ceiling_date(as.Date(paste0(last_month, "-01")), unit = "month"))
+ }
+ }
+
+ if (verbose) message("AppEEARS NDVI+EVI request from ", start_date, " to ", end_date)
+
+ # Authentication via ~/.netrc (automatically used by appeears package)
+ if (verbose) message("Using EARTHDATA_USER: ", earthdata_user)
+
+ # Ensure domain is in WGS84
+ dom <- domain
+ if (!sf::st_is_longlat(dom)) {
+ if (is.na(sf::st_crs(dom))) stop("'domain' must have a valid CRS.")
+ dom <- sf::st_transform(dom, 4326)
+ }
+ aoi_path <- file.path(temp_directory, "aoi.geojson")
+ suppressWarnings(sf::st_write(dom, aoi_path, driver = "GeoJSON", delete_dsn = TRUE, quiet = TRUE))
+ aoi_json <- jsonlite::read_json(aoi_path, simplifyVector = FALSE)
+
+ # Resolve layer names dynamically (include composite Day of Year for exact acquisition date)
+ ndvi_layer <- "500m_16_days_NDVI"
+ evi_layer <- "500m_16_days_EVI"
+ qa_layer <- "500m_16_days_VI_Quality"
+ doy_layer <- "Day_of_Year_1km"
+
+ try({
+ lyr <- appeears::rs_layers("MOD13A1.061")
+ cand_cols <- intersect(c("Layer", "Name", "layer", "name"), names(lyr))
+ if (length(cand_cols)) {
+ vals <- unlist(lapply(cand_cols, function(cc) lyr[[cc]]))
+ ndvi_cand <- vals[grepl("NDVI", vals, ignore.case = TRUE)][1]
+ evi_cand <- vals[grepl("EVI", vals, ignore.case = TRUE)][1]
+ qa_cand <- vals[grepl("VI.*Quality|Quality", vals, ignore.case = TRUE)][1]
+ doy_cand <- vals[grepl("Day[_ ]?of[_ ]?Year|composite.*day", vals, ignore.case = TRUE)][1]
+ if (!is.na(ndvi_cand)) ndvi_layer <- ndvi_cand
+ if (!is.na(evi_cand)) evi_layer <- evi_cand
+ if (!is.na(qa_cand)) qa_layer <- qa_cand
+ if (!is.na(doy_cand)) doy_layer <- doy_cand
+ }
+ }, silent = TRUE)
+
+ if (verbose) message("Using layers: ", ndvi_layer, ", ", evi_layer, ", ", qa_layer, ", ", doy_layer)
+
+ # Build request payload - NDVI, EVI, and QA in one request
+ req <- list(
+ task_type = "area",
+ task_name = paste0("emma_ndvi_evi_", format(Sys.time(), "%Y%m%d%H%M%S")),
+ params = list(
+ dates = list(start = as.character(start_date), end = as.character(end_date)),
+ layers = list(
+ list(product = "MOD13A1.061", layer = ndvi_layer),
+ list(product = "MOD13A1.061", layer = evi_layer),
+ list(product = "MOD13A1.061", layer = qa_layer),
+ list(product = "MOD13A1.061", layer = doy_layer)
+ ),
+ output = list(format = "netcdf4", projection = "native"),
+ geo = aoi_json
+ )
+ )
+
+ # Submit and poll
+ task <- appeears::rs_request(request = req)
+ if (verbose) message("Submitted AppEEARS task: ", task$task_id)
+
+ repeat {
+ st <- appeears::rs_status(task$task_id)
+ if (isTRUE(tolower(st$status) %in% c("done", "complete", "completed"))) break
+ if (isTRUE(tolower(st$status) %in% c("error", "failed"))) stop("AppEEARS task failed.")
+ Sys.sleep(30)
+ if (verbose) message("Waiting... status: ", st$status)
+ }
+
+ # Download and unzip
+ dl_paths <- appeears::rs_download(task_id = task$task_id, path = temp_directory)
+ zips <- list.files(temp_directory, pattern = "\\.zip$", full.names = TRUE, recursive = TRUE)
+ if (length(zips)) {
+ for (z in zips) utils::unzip(z, exdir = temp_directory)
+ }
+
+ # Collect NetCDFs
+ nc_paths <- list.files(temp_directory, pattern = "\\.nc$", full.names = TRUE, recursive = TRUE)
+ if (length(nc_paths) == 0) {
+ if (verbose) message("No NetCDF files downloaded.")
+ return(invisible(NULL))
+ }
+
+ # Split into monthly files
+ write_monthly_netcdf <- function(nc_file, out_dir) {
+ r <- terra::rast(nc_file)
+ tt <- try(terra::time(r), silent = TRUE)
+ if (inherits(tt, "try-error") || is.null(tt) || length(tt) == 0) {
+ out <- file.path(out_dir, sprintf("ndvi_evi_MOD13A1_%s.nc", format(as.Date(end_date), "%Y-%m")))
+ terra::writeCDF(r, filename = out, overwrite = TRUE)
+ return(out)
+ }
+ months <- unique(format(as.Date(tt), "%Y-%m"))
+ outs <- character(0)
+ for (m in months) {
+ idx <- which(format(as.Date(tt), "%Y-%m") == m)
+ if (length(idx) == 0) next
+ r_m <- r[[idx]]
+ out <- file.path(out_dir, sprintf("ndvi_evi_MOD13A1_%s.nc", m))
+ terra::writeCDF(r_m, filename = out, overwrite = TRUE)
+ outs <- c(outs, out)
+ }
+ outs
+ }
+
+ monthly_files <- unique(unlist(lapply(nc_paths, write_monthly_netcdf, out_dir = temp_directory)))
+ monthly_files <- monthly_files[file.exists(monthly_files)]
+ if (length(monthly_files) == 0) {
+ if (verbose) message("No monthly NetCDF files prepared.")
+ return(invisible(NULL))
+ }
+
+ # Apply max_layers limit
+ if (!is.null(max_layers) && length(monthly_files) > max_layers) {
+ if (verbose) message("Limiting to ", max_layers, " files")
+ monthly_files <- monthly_files[1:max_layers]
+ }
+
+ # Skip duplicates
+ existing_names <- existing_nc$file_name
+ to_upload <- monthly_files[!basename(monthly_files) %in% existing_names]
+ if (length(to_upload) == 0) {
+ if (verbose) message("Releases already up to date")
+ latest <- vapply(existing_names, parse_month_from_name, character(1))
+ return(invisible(max(latest[!is.na(latest)])))
+ }
+
+ # Upload
+ for (f in to_upload) {
+ Sys.sleep(sleep_time)
+ piggyback::pb_upload(file = f, repo = "AdamWilsonLab/emma_envdata", tag = tag)
+ if (verbose) message("Uploaded ", basename(f))
+ }
+
+ latest_month <- max(sub(".*([0-9]{4}-[0-9]{2})\\.nc$", "\\1", basename(to_upload)))
+ unlink(temp_directory, recursive = TRUE, force = TRUE)
+ invisible(latest_month)
+}
diff --git a/R/get_release_ndvi_viirs_appeears.R b/R/get_release_ndvi_viirs_appeears.R
new file mode 100644
index 00000000..2082a2d6
--- /dev/null
+++ b/R/get_release_ndvi_viirs_appeears.R
@@ -0,0 +1,207 @@
+#' @title Download VIIRS NDVI via AppEEARS and publish monthly NetCDF
+#' @description Submits an AppEEARS area request for VNP13A1.001 NDVI and QA
+#' over the provided domain and date range, downloads NetCDF outputs, splits to
+#' monthly NetCDF files, and uploads them to GitHub Releases.
+#' @author EMMA Team
+#' @param temp_directory Temporary working directory for downloads and intermediate files.
+#' @param tag Release tag to upload monthly NetCDFs to (e.g., "raw_ndvi_viirs_nc").
+#' @param domain An `sf` polygon defining the area of interest.
+#' @param sleep_time Seconds to sleep between uploads to avoid rate limiting.
+#' @param start_date Optional ISO date (YYYY-MM-DD). If NULL, inferred from existing releases.
+#' @param end_date Optional ISO date (YYYY-MM-DD). Defaults to `Sys.Date()`.
+#' @param earthdata_user NASA Earthdata username. Defaults to `Sys.getenv("EARTHDATA_USER")`.
+#' @param earthdata_password NASA Earthdata password. Defaults to `Sys.getenv("EARTHDATA_PASSWORD")`.
+#' @param max_layers Maximum number of monthly files to process in one run. NULL for all.
+#' @param verbose Logical for progress messages.
+#' @return Character string of the latest YYYY-MM successfully uploaded, or NULL if nothing new.
+get_release_ndvi_viirs_appeears <- function(
+ temp_directory = "data/temp/raw_data/ndvi_viirs/",
+ tag = "raw_ndvi_viirs_nc",
+ domain,
+ sleep_time = 1,
+ start_date = NULL,
+ end_date = as.character(Sys.Date()),
+ earthdata_user = Sys.getenv("EARTHDATA_USER"),
+ earthdata_password = Sys.getenv("EARTHDATA_PASSWORD"),
+ max_layers = NULL,
+ verbose = TRUE
+) {
+
+ # Package checks
+ required_pkgs <- c("appeears", "terra", "sf", "piggyback", "lubridate", "jsonlite", "dplyr")
+ missing <- required_pkgs[!sapply(required_pkgs, requireNamespace, quietly = TRUE)]
+ if (length(missing)) {
+ stop("Required packages missing: ", paste(missing, collapse = ", "))
+ }
+
+ if (earthdata_user == "") {
+ stop("EARTHDATA_USER not found. Set EARTHDATA_USER env var and configure ~/.netrc with password.")
+ }
+
+ # Ensure clean temp directory
+ if (dir.exists(temp_directory)) {
+ unlink(temp_directory, recursive = TRUE, force = TRUE)
+ }
+ dir.create(temp_directory, recursive = TRUE, showWarnings = FALSE)
+
+ # Ensure release exists
+ tryCatch(
+ piggyback::pb_new_release(repo = "AdamWilsonLab/emma_envdata", tag = tag),
+ error = function(e) {
+ if (verbose) message("Release ", tag, " already exists")
+ }
+ )
+
+ # Determine start_date from existing releases
+ released_files <- piggyback::pb_list(repo = "AdamWilsonLab/emma_envdata")
+ existing_nc <- released_files[released_files$tag == tag & grepl("\\.nc$", released_files$file_name), , drop = FALSE]
+
+ parse_month_from_name <- function(x) {
+ m <- sub(".*([0-9]{4}-[0-9]{2})\\.nc$", "\\1", x)
+ if (grepl("^[0-9]{4}-[0-9]{2}$", m)) return(m) else return(NA_character_)
+ }
+
+ if (is.null(start_date)) {
+ months_done <- vapply(existing_nc$file_name, parse_month_from_name, character(1))
+ months_done <- months_done[!is.na(months_done)]
+ if (length(months_done) == 0) {
+ start_date <- "2012-01-19" # VIIRS start
+ } else {
+ last_month <- max(months_done)
+ start_date <- as.character(lubridate::ceiling_date(as.Date(paste0(last_month, "-01")), unit = "month"))
+ }
+ }
+
+ if (verbose) message("AppEEARS VIIRS NDVI request from ", start_date, " to ", end_date)
+
+ # Authentication via ~/.netrc (automatically used by appeears package)
+ if (verbose) message("Using EARTHDATA_USER: ", earthdata_user)
+
+ # Ensure domain in WGS84
+ dom <- domain
+ if (!sf::st_is_longlat(dom)) {
+ if (is.na(sf::st_crs(dom))) stop("'domain' must have a valid CRS.")
+ dom <- sf::st_transform(dom, 4326)
+ }
+ aoi_path <- file.path(temp_directory, "aoi.geojson")
+ suppressWarnings(sf::st_write(dom, aoi_path, driver = "GeoJSON", delete_dsn = TRUE, quiet = TRUE))
+ aoi_json <- jsonlite::read_json(aoi_path, simplifyVector = FALSE)
+
+ # Resolve layer names (include composite day of year for exact acquisition date)
+ ndvi_layer <- "500_m_16_days_NDVI"
+ qa_layer <- "500_m_16_days_VI_Quality"
+ doy_layer <- "composite_day_of_the_year"
+
+ try({
+ lyr <- appeears::rs_layers("VNP13A1.001")
+ cand_cols <- intersect(c("Layer", "Name", "layer", "name"), names(lyr))
+ if (length(cand_cols)) {
+ vals <- unlist(lapply(cand_cols, function(cc) lyr[[cc]]))
+ ndvi_cand <- vals[grepl("NDVI", vals, ignore.case = TRUE)][1]
+ qa_cand <- vals[grepl("Quality", vals, ignore.case = TRUE)][1]
+ doy_cand <- vals[grepl("Day[_ ]?of[_ ]?Year|composite.*day", vals, ignore.case = TRUE)][1]
+ if (!is.na(ndvi_cand)) ndvi_layer <- ndvi_cand
+ if (!is.na(qa_cand)) qa_layer <- qa_cand
+ if (!is.na(doy_cand)) doy_layer <- doy_cand
+ }
+ }, silent = TRUE)
+
+ if (verbose) message("Using layers: ", ndvi_layer, ", ", qa_layer, ", ", doy_layer)
+
+ # Build request
+ req <- list(
+ task_type = "area",
+ task_name = paste0("emma_viirs_", format(Sys.time(), "%Y%m%d%H%M%S")),
+ params = list(
+ dates = list(start = as.character(start_date), end = as.character(end_date)),
+ layers = list(
+ list(product = "VNP13A1.001", layer = ndvi_layer),
+ list(product = "VNP13A1.001", layer = qa_layer),
+ list(product = "VNP13A1.001", layer = doy_layer)
+ ),
+ output = list(format = "netcdf4", projection = "native"),
+ geo = aoi_json
+ )
+ )
+
+ # Submit and poll
+ task <- appeears::rs_request(request = req)
+ if (verbose) message("Submitted AppEEARS task: ", task$task_id)
+
+ repeat {
+ st <- appeears::rs_status(task$task_id)
+ if (isTRUE(tolower(st$status) %in% c("done", "complete", "completed"))) break
+ if (isTRUE(tolower(st$status) %in% c("error", "failed"))) stop("AppEEARS task failed.")
+ Sys.sleep(30)
+ if (verbose) message("Waiting... status: ", st$status)
+ }
+
+ # Download and unzip
+ dl_paths <- appeears::rs_download(task_id = task$task_id, path = temp_directory)
+ zips <- list.files(temp_directory, pattern = "\\.zip$", full.names = TRUE, recursive = TRUE)
+ if (length(zips)) {
+ for (z in zips) utils::unzip(z, exdir = temp_directory)
+ }
+
+ # Collect NetCDFs
+ nc_paths <- list.files(temp_directory, pattern = "\\.nc$", full.names = TRUE, recursive = TRUE)
+ if (length(nc_paths) == 0) {
+ if (verbose) message("No NetCDF files downloaded.")
+ return(invisible(NULL))
+ }
+
+ # Split monthly
+ write_monthly_netcdf <- function(nc_file, out_dir) {
+ r <- terra::rast(nc_file)
+ tt <- try(terra::time(r), silent = TRUE)
+ if (inherits(tt, "try-error") || is.null(tt) || length(tt) == 0) {
+ out <- file.path(out_dir, sprintf("ndvi_VNP13A1_%s.nc", format(as.Date(end_date), "%Y-%m")))
+ terra::writeCDF(r, filename = out, overwrite = TRUE)
+ return(out)
+ }
+ months <- unique(format(as.Date(tt), "%Y-%m"))
+ outs <- character(0)
+ for (m in months) {
+ idx <- which(format(as.Date(tt), "%Y-%m") == m)
+ if (length(idx) == 0) next
+ r_m <- r[[idx]]
+ out <- file.path(out_dir, sprintf("ndvi_VNP13A1_%s.nc", m))
+ terra::writeCDF(r_m, filename = out, overwrite = TRUE)
+ outs <- c(outs, out)
+ }
+ outs
+ }
+
+ monthly_files <- unique(unlist(lapply(nc_paths, write_monthly_netcdf, out_dir = temp_directory)))
+ monthly_files <- monthly_files[file.exists(monthly_files)]
+ if (length(monthly_files) == 0) {
+ if (verbose) message("No monthly NetCDF files prepared.")
+ return(invisible(NULL))
+ }
+
+ # Apply max_layers
+ if (!is.null(max_layers) && length(monthly_files) > max_layers) {
+ if (verbose) message("Limiting to ", max_layers, " files")
+ monthly_files <- monthly_files[1:max_layers]
+ }
+
+ # Skip duplicates
+ existing_names <- existing_nc$file_name
+ to_upload <- monthly_files[!basename(monthly_files) %in% existing_names]
+ if (length(to_upload) == 0) {
+ if (verbose) message("Releases already up to date")
+ latest <- vapply(existing_names, parse_month_from_name, character(1))
+ return(invisible(max(latest[!is.na(latest)])))
+ }
+
+ # Upload
+ for (f in to_upload) {
+ Sys.sleep(sleep_time)
+ piggyback::pb_upload(file = f, repo = "AdamWilsonLab/emma_envdata", tag = tag)
+ if (verbose) message("Uploaded ", basename(f))
+ }
+
+ latest_month <- max(sub(".*([0-9]{4}-[0-9]{2})\\.nc$", "\\1", basename(to_upload)))
+ unlink(temp_directory, recursive = TRUE, force = TRUE)
+ invisible(latest_month)
+}
diff --git a/R/national_boundary.R b/R/national_boundary.R
deleted file mode 100644
index fd86f380..00000000
--- a/R/national_boundary.R
+++ /dev/null
@@ -1,30 +0,0 @@
-# National Boundary
-
-#' @author Adam M. Wilson
-#' @description Download national boundary file from the UN
-#' @source https://data.humdata.org/dataset/south-africa-admin-level-1-boundaries
-
-national_boundary <- function(file="data/south_africa.gpkg"){
-
- #Adjust timeout to allow for slow internet
- if(getOption('timeout') < 1000){
- options(timeout = 1000)
- }
-
-
- url="https://data.humdata.org/dataset/061d4492-56e8-458c-a3fb-e7950991adf0/resource/f5b08257-8d03-48dc-92c8-aaa4fb7285f0/download/zaf_adm_sadb_ocha_20201109_shp.zip"
- tmpfile1=tempfile()
- tmpdir1=tempdir()
- download.file(url,destfile = tmpfile1)
- unzip(tmpfile1,exdir=tmpdir1)
-
- country=st_read(file.path(tmpdir1,"zaf_adm_sadb_ocha_20201109_SHP/zaf_admbnda_adm0_sadb_ocha_20201109.shp"))
-# st_write(country,dsn=file,append=F)
-# return(file)
-
- return(country)
-}
-# end function
-
-
-
diff --git a/R/network_drive_explore.R b/R/network_drive_explore.R
deleted file mode 100644
index 48a9a49c..00000000
--- a/R/network_drive_explore.R
+++ /dev/null
@@ -1,62 +0,0 @@
-# # box code not working
-# library(boxr)
-# library(tidyverse)
-#
-# # library(fs)
-# # dir_create("~/.boxr-auth")
-#
-# # from https://github.com/r-box/boxr/issues/166
-# # options(boxr.retry.times = 10)
-#
-# #box_auth()
-#
-# # sometimes this fails for no apparent reason - must just wait for it to work again!
-# # https://github.com/r-box/boxr/issues/166
-# box_auth_service()
-# #box_auth_service(token_text = unlist(read_lines('~/.boxr-auth/token.json')))
-#
-# # root directory
-#
-#
-# box_setwd()
-#
-#
-# # create new directory to hold results
-# dir_name="emmabox"
-# box_dir_create(dir_name = dir_name)
-#
-# eid <- box_ls() %>% as.data.frame() %>% filter(name==dir_name)
-#
-# # Share folder with
-# uid=271686873 # adamw@buffalo.edu
-#
-#
-# box_collab_create(
-# dir_id = eid$id,
-# user_id = uid,
-# role = "co-owner",
-# can_view_path = TRUE
-# )
-#
-# # set box working directory
-# box_setwd(eid$id)
-# box_setwd("..")
-#
-# boxr_options()
-# box_ls()
-#
-# # test writing to folder
-# box_write(
-# iris,
-# "iris.csv")
-#
-# files <- box_ls() %>% as.data.frame
-#
-# files %>%
-# filter(name=="iris.csv") %>%
-# select(id) %>% unlist() %>%
-# box_delete_file()
-#
-#
-#
-#
diff --git a/R/process_dynamic_data.R b/R/process_dynamic_data.R
new file mode 100644
index 00000000..26f8e33b
--- /dev/null
+++ b/R/process_dynamic_data.R
@@ -0,0 +1,101 @@
+
+library(arrow)
+library(tidyverse)
+
+
+#############################################################
+#' @author Brian Maitner
+#' @description this function takes in tif file from the input, converts them to tidy format, and saves as .gz.parquet
+#' @param input_dir Directory containing input files.
+#' @param output_dir Directory to stick output files in
+#' @param variable_name This is included in the tidy file output
+#' @param ... Does nothing. Used for targets.
+#' @note Output dataframes have three columns: CellID, date, variable, value. ALso note that cells with NA values are omitted.
+process_dynamic_data_to_parquet <- function(input_dir = "data/raw_data/ndvi_modis/",
+ output_dir = "data/processed_data/dynamic_parquet/ndvi/",
+ variable_name = "ndvi",
+ ...){
+
+
+ # make a directory if one doesn't exist yet
+
+ if(!dir.exists(output_dir)){
+
+ dir.create(output_dir, recursive = TRUE)
+
+ }
+
+ # get files
+
+ all_files <- list.files(path = input_dir,pattern = ".tif$",full.names = TRUE)
+
+ all_files_int <-
+ all_files %>%
+ gsub(pattern = input_dir, replacement = "") %>%
+ gsub(pattern = "/", replacement = "") %>%
+ gsub(pattern = ".tif", replacement = "") %>%
+ lubridate::as_date()|>
+ as.numeric()
+
+
+ # figure out which files have been processed
+
+ output_files <-
+ list.files(path = output_dir, pattern = ".gz.parquet", full.names = TRUE) %>%
+ gsub(pattern = output_dir, replacement = "") %>%
+ gsub(pattern = "/", replacement = "") %>%
+ gsub(pattern = ".gz.parquet", replacement = "")
+
+ #Don't worry about files that have been processed already
+
+ all_files <- all_files[which(!all_files_int %in% output_files)]
+
+ rm(output_files, all_files_int)
+
+ #end if things are already done
+ if(length(all_files) == 0){
+
+ message(paste("Finished converting ",
+ variable_name,
+ " files to parquet", sep = ""))
+
+ return(output_dir)
+
+ }
+
+
+ # process the files that haven't been done yet
+
+
+ for(i in 1:length(all_files)){
+
+ # Get the date in integer format (will append to the data)
+ all_files[i] |>
+ gsub(pattern = input_dir, replacement = "")|>
+ gsub(pattern = "/", replacement = "")|>
+ gsub(pattern = ".tif", replacement = "")|>
+ lubridate::as_date()|>
+ as.numeric()-> integer_date_i
+
+
+ # Process ith file
+
+ all_files[i] |>
+ stars::read_stars() |>
+ as.data.frame() %>%
+ mutate(cellID = row_number(),
+ date = integer_date_i,
+ variable = variable_name) %>%
+ rename( value := 3) %>%
+ dplyr::select(cellID, date, variable, value ) %>%
+ drop_na() %>%
+ write_parquet(sink = paste(output_dir, integer_date_i, ".gz.parquet", sep = ""),
+ compression = "gzip")
+
+ } #end i loop
+
+ #End fx
+ message(paste("Finished converting ",variable_name, " files to parquet",sep = ""))
+ return(output_dir)
+
+}#end fx
diff --git a/R/process_fix_modis_projection.R b/R/process_fix_modis_projection.R
new file mode 100644
index 00000000..df74d08e
--- /dev/null
+++ b/R/process_fix_modis_projection.R
@@ -0,0 +1,94 @@
+
+#'@description to check the projection of MODIS products downloaded from rgee
+#'@author Brian Maitner
+#'@param A directory containing MODIS files with incorrect projections
+
+process_fix_modis_projection <-
+function(directory, ...){
+
+ #specify the correct projection
+ nasa_proj <- "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +R=6371007.181 +units=m +no_defs"
+
+ #get a vector of rasters
+ rasters <- list.files(path = directory,
+ pattern = ".tif$",
+ full.names = TRUE)
+
+ #set up a change log if needed
+ if(exists(paste(directory,"log.csv",sep = ""))){
+
+ suppressWarnings(expr =
+ cbind("file","original_proj","assigned_proj") %>%
+ write.table(x = .,
+ file = paste(directory,"log.csv",sep = ""),
+ append = TRUE,
+ col.names = FALSE,
+ row.names=FALSE,
+ sep = ",")
+ )
+
+
+ }
+
+
+ #iterate and fix
+ for(i in 1:length(rasters)){
+
+ #load ith raster
+ rast_i <- terra::rast(x = rasters[i])
+
+ #get the projection
+
+ original_proj <- crs(rast_i, proj = TRUE)
+
+ #check whether the raster matches the correct projection
+ if(!identical(nasa_proj, original_proj)){
+
+ message("Detected error in MODIS projection, correcting and logging the change")
+
+ crs(rast_i) <- nasa_proj
+
+ #write a new raster with a different name
+ terra::writeRaster(x = rast_i,
+ filename = gsub(pattern = ".tif$",
+ replacement =".temp.tif",
+ x = rasters[i]),
+ filetype="GTiff",
+ overwrite = TRUE)
+
+ #delete old raster
+ file.remove(rasters[i])
+
+ #update new name
+ file.rename(from = gsub(pattern = ".tif$",
+ replacement =".temp.tif",
+ x = rasters[i]),
+ to = rasters[i])
+
+ #log the change
+
+
+ data.frame(file = rasters[i],
+ original_proj = original_proj,
+ assigned_proj = nasa_proj) %>%
+
+ write.table(x = .,
+ file = paste(directory,"log.csv",sep = ""),
+ append = TRUE,
+ col.names = FALSE,
+ row.names=FALSE,
+ sep = ",")
+
+
+
+ }
+
+ }
+
+
+
+}
+
+
+
+
diff --git a/R/process_release_biome_raster.R b/R/process_release_biome_raster.R
deleted file mode 100644
index 95d2875b..00000000
--- a/R/process_release_biome_raster.R
+++ /dev/null
@@ -1,107 +0,0 @@
-# Make Domain
-
-#' @author Brian S. Maitner
-
-# Process 2018 Vegetation dataset into a raster with MODIS specs
-
-
-#' @param vegmap_shp path to the 2018 national vegetation map shapefile
-#' @param template_release path information to template release.
-#' @param temp_directory temporary directory. will be deleted.
-#' @param sleep_time amount of time (in seconds) to pause after a Github query. Defaults to 10.
-
-process_release_biome_raster <- function(template_release,
- vegmap_shp,
- domain,
- temp_directory = "data/temp/raw_data/vegmap_raster/",
- sleep_time = 10){
-
- # Ensure directory is empty if it exists
-
- if(dir.exists(file.path(temp_directory))){
- unlink(file.path(temp_directory), recursive = TRUE, force = TRUE)
- }
-
- # make a directory if one doesn't exist yet
-
- if(!dir.exists(file.path(temp_directory))){
- dir.create(file.path(temp_directory), recursive = TRUE)
- }
-
- # get template raster
-
- robust_pb_download(file = template_release$file,
- dest = temp_directory,
- repo = template_release$repo,
- tag = template_release$tag,
- max_attempts = 10,
- sleep_time = sleep_time)
-
- # load template
-
- template <- terra::rast(file.path(temp_directory, template_release$file))
-
- # load vegmap
-
- vegmap_za <- st_read(vegmap_shp) %>%
- janitor::clean_names() %>%
- st_make_valid() %>%
- st_transform(crs = crs(template))
-
- #transform domain
- domain %>% st_transform(crs = crs(template)) -> domain
-
- #crop vegmap to save size?
-
- vegmap_za %>%
- st_intersection(y = domain) -> vegmap_za
-
- # rasterize vegmap
-
- # Note: the Github version of exactextractr could do this more simply using exactextractr::coverage_fraction()
-
- n <- 10 #number of subcells to use for aggregation
-
- template <- disagg(rast(template), n) #break raster into smaller one
-
- #r <- disagg(template, n) #break raster into smaller one: this is more memory-intense
-
- r <- rasterize(x = vect(vegmap_za),
- y = template,
- field = "biome_18") #rasterize at fine resolution
-
- out_rast <- aggregate(r, n, "modal") #re-aggregate using modal biome
-
- # save output version
-
- writeRaster(x = out_rast,
- filename = file.path(temp_directory,"biome_raster_modis_proj.tif"),
- overwrite=TRUE)
-
- # upload transformed version
-
- pb_upload(file = file.path(temp_directory,"biome_raster_modis_proj.tif"),
- repo = "AdamWilsonLab/emma_envdata",
- tag = "processed_static",
- name = "biome_raster_modis_proj.tif")
-
- pb_upload(file = file.path(temp_directory,"biome_raster_modis_proj.tif.aux.xml"),
- repo = "AdamWilsonLab/emma_envdata",
- tag = "processed_static",
- name = "biome_raster_modis_proj.tif.aux.xml")
-
- # cleanup
-
- unlink(file.path(temp_directory), recursive = TRUE, force = TRUE)
-
- # End functions
-
- message("Finished rasterizing vegmap")
- return(as.character(Sys.Date()))
-
-
-}
-
-
-
-
diff --git a/R/process_stable_data.R b/R/process_stable_data.R
new file mode 100644
index 00000000..ba742f6f
--- /dev/null
+++ b/R/process_stable_data.R
@@ -0,0 +1,65 @@
+library(arrow)
+
+#' @param output_dir directory (no file name) in which to save the csv that is returned
+#' @param precip_dir directory containing the precipitation layers
+#' @param landcover_dir directory containing the landcover layers
+#' @param elevation_dir directory containing the elevation layer
+#' @param cloud_dir directory containing the could layers
+#' @param climate_dir directory containing the climate layers
+#' @param alos_dir directory containing the alos layers
+#' @param ... Does nothing, used to ensure upstream changes impact things
+process_stable_data <- function(output_dir = "data/processed_data/model_data/",
+ precip_dir = "data/processed_data/precipitation_chelsa/",
+ landcover_dir = "data/processed_data/landcover_za/",
+ elevation_dir = "data/processed_data/elevation_nasadem/",
+ cloud_dir = "data/processed_data/clouds_wilson/",
+ climate_dir = "data/processed_data/climate_chelsa/",
+ alos_dir = "data/processed_data/alos/",
+ ...) {
+
+
+ # make a directory if one doesn't exist yet
+
+ if(!dir.exists(output_dir)){
+ dir.create(output_dir, recursive = TRUE)
+ }
+
+ # process data
+
+ c(precip_dir,
+ landcover_dir,
+ elevation_dir,
+ cloud_dir,
+ climate_dir,
+ alos_dir) |>
+
+ lapply(FUN = function(x){
+ list.files(path = x,
+ pattern = ".tif$",
+ full.names = T,
+ recursive = T)}) |>
+ unlist() |>
+ stars::read_stars() |>
+ as.data.frame() |>
+ mutate(cellID = row_number()) %>%
+ mutate(count_na = apply(., 1,FUN = function(x){sum(is.na(x))} )) %>%
+ filter(count_na < 20) %>%
+ write_parquet(sink = paste(output_dir,"stable_data.gz.parquet",sep = ""),
+ compression = "gzip")
+
+ #The following line of code can be used to break things down by a grouping variable
+ # write_dataset(path = output_dir,
+ # format = "parquet",
+ # basename_template = "stable_data{i}.parquet.gz",
+ # compression = "gzip",
+ # existing_data_behavior = "delete_matching")
+
+ #cleanup
+ gc()
+
+ # Return filename
+
+ message("Finished processing stable model data")
+ return(paste(output_dir,"stable_data.gz.parquet",sep = ""))
+
+}
diff --git a/R/tar_release_storage.R b/R/tar_release_storage.R
new file mode 100644
index 00000000..e6913a92
--- /dev/null
+++ b/R/tar_release_storage.R
@@ -0,0 +1,272 @@
+#' Create GitHub Releases repository for targets
+#' @description Create a tar_repository_cas() object that stores targets
+#' using GitHub releases as the backend, with local persistent caching.
+#' @param repo Repository in "owner/repo" format
+#' @param tag Release tag to store objects (e.g., "objects_v2024" or "objects_current")
+#' @param format Serialization format: "qs" (fast, recommended), "rds", or "parquet"
+#' @param cache_dir Persistent cache directory for downloaded files (default: "data/.tar_cache")
+#' @return tar_repository_cas() object for use with tar_target(repository = ...)
+#' @details
+#' Use with tar_target(..., repository = tar_github_release_repo(...))
+#'
+#' This implements the Content Addressable Storage (CAS) pattern where targets
+#' are stored with serialized R objects, with GitHub releases as the backend
+#' and local persistent caching for speed.
+#'
+#' Example:
+#' ```
+#' gh_repo <- tar_github_release_repo(
+#' repo = "AdamWilsonLab/emma_envdata",
+#' tag = "objects_current",
+#' format = "qs",
+#' cache_dir = "data/.tar_cache"
+#' )
+#'
+#' tar_target(
+#' my_object,
+#' some_computation(),
+#' repository = gh_repo,
+#' cue = tar_cue(mode = "never")
+#' )
+#' ```
+#' @export
+tar_github_release_repo <- function(
+ repo,
+ tag,
+ format = "qs",
+ cache_dir = "data/.tar_cache"
+) {
+
+ stopifnot(
+ is.character(repo) && nchar(repo) > 0,
+ is.character(tag) && nchar(tag) > 0,
+ format %in% c("qs", "rds", "parquet")
+ )
+
+ # Create a tar_repository_cas() object with self-contained functions
+ # that read config from environment variables
+ tar_repository_cas(
+ upload = function(key, path) {
+ repo <- Sys.getenv("TAR_GH_RELEASE_REPO")
+ tag <- Sys.getenv("TAR_GH_RELEASE_TAG")
+ format <- Sys.getenv("TAR_GH_RELEASE_FORMAT")
+
+ # Ensure release exists before uploading
+ release_exists <- FALSE
+ tryCatch({
+ assets <- piggyback::pb_list(repo = repo, tag = tag)
+ release_exists <- TRUE
+ }, error = function(e) {
+ # pb_list throws error if release doesn't exist
+ release_exists <<- FALSE
+ })
+
+ if (!release_exists) {
+ message("[tar_github_release] Creating release: ", tag)
+ tryCatch({
+ piggyback::pb_new_release(repo = repo, tag = tag)
+ message("[tar_github_release] Release created: ", tag)
+ }, error = function(e) {
+ if (!grepl("already exists", tolower(conditionMessage(e)))) {
+ stop("[tar_github_release] Failed to create release: ", conditionMessage(e))
+ }
+ })
+ }
+
+ if (file.exists(path) && !dir.exists(path)) {
+ message("[tar_github_release] Uploading file: ", key)
+
+ # Get credentials
+ creds <- tryCatch({
+ gitcreds::gitcreds_get()
+ }, error = function(e) {
+ message("[tar_github_release] No git credentials found, trying without token")
+ NULL
+ })
+
+ token <- if (!is.null(creds)) creds$password else NULL
+
+ max_attempts <- 3
+ uploaded <- FALSE
+
+ for (attempt in 1:max_attempts) {
+ tryCatch({
+ piggyback::pb_upload(
+ file = path,
+ repo = repo,
+ tag = tag,
+ name = key,
+ overwrite = TRUE,
+ .token = token
+ )
+ message("[tar_github_release] File uploaded successfully: ", key)
+ # Give GitHub time to process the file
+ Sys.sleep(3)
+ uploaded <- TRUE
+ return(invisible())
+ }, error = function(e) {
+ message("[tar_github_release] Upload attempt ", attempt, " failed: ", conditionMessage(e))
+ if (attempt < max_attempts) {
+ Sys.sleep(2)
+ } else {
+ stop("[tar_github_release] Failed to upload file after ", max_attempts, " attempts: ", conditionMessage(e))
+ }
+ })
+ }
+ } else {
+ obj <- readRDS(path)
+ temp_file <- tempfile(fileext = paste0(".", format))
+ on.exit(unlink(temp_file), add = TRUE)
+
+ if (format == "qs") {
+ qs::qsave(obj, temp_file)
+ } else if (format == "rds") {
+ saveRDS(obj, temp_file)
+ } else if (format == "parquet") {
+ arrow::write_parquet(obj, temp_file)
+ }
+
+ max_attempts <- 5
+ for (attempt in 1:max_attempts) {
+ tryCatch({
+ piggyback::pb_upload(
+ file = temp_file,
+ repo = repo,
+ tag = tag,
+ name = key,
+ overwrite = TRUE,
+ .token = NULL
+ )
+ message("[tar_github_release] Object uploaded: ", key)
+ return(invisible())
+ }, error = function(e) {
+ if (attempt < max_attempts) {
+ message("[tar_github_release] Upload attempt ", attempt, " failed: ", conditionMessage(e))
+ Sys.sleep(2)
+ } else {
+ stop("[tar_github_release] Failed to upload after ", max_attempts, " attempts: ", conditionMessage(e))
+ }
+ })
+ }
+ }
+ },
+ download = function(key, path) {
+ repo <- Sys.getenv("TAR_GH_RELEASE_REPO")
+ tag <- Sys.getenv("TAR_GH_RELEASE_TAG")
+ format <- Sys.getenv("TAR_GH_RELEASE_FORMAT")
+ cache_dir <- Sys.getenv("TAR_GH_RELEASE_CACHE_DIR")
+
+ dir.create(cache_dir, recursive = TRUE, showWarnings = FALSE)
+ cached_file <- file.path(cache_dir, key)
+
+ need_download <- TRUE
+ if (file.exists(cached_file)) {
+ tryCatch({
+ remote_assets <- piggyback::pb_list(repo = repo, tag = tag)
+ remote_asset <- remote_assets[remote_assets$file_name == key, ]
+
+ if (nrow(remote_asset) > 0) {
+ local_size <- file.size(cached_file)
+ remote_size <- remote_asset$size[1]
+
+ if (local_size == remote_size) {
+ message("[tar_github_release] Cache valid (size match: ", local_size, " bytes)")
+ need_download <- FALSE
+ }
+ }
+ }, error = function(e) {
+ message("[tar_github_release] Could not verify cache: ", conditionMessage(e))
+ })
+ }
+
+ if (need_download) {
+ max_attempts <- 5
+ for (attempt in 1:max_attempts) {
+ tryCatch({
+ piggyback::pb_download(
+ file = key,
+ repo = repo,
+ tag = tag,
+ dest = cache_dir,
+ overwrite = TRUE
+ )
+ message("[tar_github_release] Downloaded: ", key)
+ break
+ }, error = function(e) {
+ if (attempt < max_attempts) {
+ message("[tar_github_release] Download attempt ", attempt, " failed: ", conditionMessage(e))
+ Sys.sleep(2)
+ } else {
+ stop("[tar_github_release] Failed to download after ", max_attempts, " attempts: ", conditionMessage(e))
+ }
+ })
+ }
+ }
+
+ if (!file.exists(cached_file)) {
+ stop("[tar_github_release] Failed to retrieve: ", key)
+ }
+
+ file_exts <- c("parquet", "nc", "tif", "gpkg", "shp", "dbf", "prj", "shx")
+ is_spatial_file <- any(endsWith(tolower(key), paste0(".", file_exts)))
+
+ if (is_spatial_file) {
+ file.copy(cached_file, path, overwrite = TRUE)
+ message("[tar_github_release] Retrieved file: ", key)
+ } else {
+ if (format == "qs") {
+ obj <- qs::qread(cached_file)
+ } else if (format == "rds") {
+ obj <- readRDS(cached_file)
+ } else if (format == "parquet") {
+ obj <- arrow::read_parquet(cached_file)
+ }
+
+ saveRDS(obj, path)
+ message("[tar_github_release] Retrieved and deserialized: ", key)
+ }
+ invisible()
+ },
+ exists = function(key) {
+ repo <- Sys.getenv("TAR_GH_RELEASE_REPO")
+ tag <- Sys.getenv("TAR_GH_RELEASE_TAG")
+
+ # Retry up to 10 times in case file was just uploaded
+ for (attempt in 1:10) {
+ tryCatch({
+ assets <- piggyback::pb_list(repo = repo, tag = tag)
+ found <- any(assets$file_name == key)
+ if (found) {
+ message("[tar_github_release] Confirmed exists: ", key, " (attempt ", attempt, ")")
+ return(TRUE)
+ }
+ if (attempt < 10) {
+ Sys.sleep(2)
+ }
+ }, error = function(e) {
+ if (attempt < 10) {
+ Sys.sleep(2)
+ }
+ })
+ }
+ FALSE
+ }
+ )
+}
+
+# Helper to set up tar_resources_repository_cas with environment variables
+tar_github_release_resources <- function(
+ repo,
+ tag,
+ format = "qs",
+ cache_dir = "data/.tar_cache"
+) {
+ tar_resources_repository_cas(
+ envvars = c(
+ TAR_GH_RELEASE_REPO = repo,
+ TAR_GH_RELEASE_TAG = tag,
+ TAR_GH_RELEASE_FORMAT = format,
+ TAR_GH_RELEASE_CACHE_DIR = cache_dir
+ )
+ )
+}
diff --git a/R/vegetation_map.R b/R/vegetation_map.R
index df37576e..315ee82a 100644
--- a/R/vegetation_map.R
+++ b/R/vegetation_map.R
@@ -8,7 +8,7 @@
#' @biomes list of biomes to keep
get_vegmap <- function(vegmap_shp, biomes = c("Fynbos","Succulent Karoo","Albany Thicket")){
-
+
# Must manually download the following and put in the raw_data folder
# 2018 National Vegetation Map
# http://bgis.sanbi.org/SpatialDataset/Detail/1674
@@ -19,9 +19,8 @@ get_vegmap <- function(vegmap_shp, biomes = c("Fynbos","Succulent Karoo","Alban
vegmap <- vegmap_za %>%
filter(biome_18 %in% biomes ) %>% #filter to list above
- st_make_valid() #some polygons had errors - this fixes them
-
-# st_write(vegmap,dsn = "data/vegmap.gpkg",append=F)
+ st_make_valid() |> #some polygons had errors - this fixes them
+ vect()
return(vegmap)
diff --git a/README_files/figure-gfm/unnamed-chunk-3-1.png b/README_files/figure-gfm/unnamed-chunk-3-1.png
index 4dbfc023..ab241357 100644
Binary files a/README_files/figure-gfm/unnamed-chunk-3-1.png and b/README_files/figure-gfm/unnamed-chunk-3-1.png differ
diff --git a/_targets.R b/_targets.R
index d8714617..f0b65e35 100644
--- a/_targets.R
+++ b/_targets.R
@@ -2,303 +2,227 @@ message("Starting tar_make()")
print("Starting tar_make() - print")
library(targets)
+library(qs)
library(tarchetypes)
+library(geotargets)
library(visNetwork)
-library(future) #not sure why this is needed, but we get an error in some of the files without it
-library(googledrive)
+library(rdryad)
+library(appeears)#,lib.loc=Sys.getenv("R_LIBS_USER"))
+library(keyring)#,lib.loc=Sys.getenv("R_LIBS_USER"))
+library(filelock)#,lib.loc=Sys.getenv("R_LIBS_USER"))
+library(arrow)
+library(sfarrow)
+
+#if (!requireNamespace("remotes", quietly = TRUE)) install.packages("remotes")
+#remotes::install_deps(dependencies = TRUE)
+
+#library(future) #not sure why this is needed, but we get an error in some of the files without it
+
+
+# check what system we are on
+ sys_info <- Sys.info()
+ message(paste("System info:",paste(names(sys_info), sys_info, sep="=", collapse = "; ")))
+ # if nodename includes "ccr.buffalo.edu", set working directory to /gscratch/scrubbed/...
+ if (grepl("ccr.buffalo.edu", sys_info[["nodename"]])) {
+ setwd("~/project/projects/emma/emma_envdata")
+ message(paste("Set working directory to:", getwd()))
+ }
-#If running this locally, make sure to set up github credentials using gitcreds::gitcreds_set()
+# Determine run mode: "prime" (full processing on server) or "update" (incremental on GitHub Actions)
+ run_mode <- if (tolower(Sys.getenv("GITHUB_ACTIONS")) == "true") {
+ "update" # Run incremental updates on GitHub Actions
+ } else {
+ "prime" # Default to prime meaning all targets are run
+ }
+ message(paste("Run mode:", run_mode))
-#devtools::install_github(repo = "bmaitner/rgee",
-# ref = "noninteractive_auth")
+#If running this locally, make sure to set up github credentials using gitcreds::gitcreds_set()
-# Ensure things are clean
- unlink(file.path("data/temp/"), recursive = TRUE, force = TRUE)
- unlink(file.path("data/raw_data/", recursive = TRUE, force = TRUE))
- message(paste("Objects:",ls(),collapse = "\n"))
# source all files in R folder
- lapply(list.files("R",pattern="[.]R",full.names = T), source)
+ lapply(list.files("R",pattern="[.]R",full.names = T), function(x) {print(x); source(x)})
message(paste("Objects:",ls(),collapse = "\n")) # To make sure all packages are loaded
options(tidyverse.quiet = TRUE)
- #options(clustermq.scheduler = "multicore")
- tar_option_set(packages = c("cmdstanr", "posterior", "bayesplot", "tidyverse",
- "stringr","knitr","sf","stars","units",
- "cubelyr","rgee", "reticulate"))
-
-#set JSON token location (should be authorized for drive and earth engine)
- json_token <- "secrets/ee-wilsonlab-emma-ef416058504a.json"
-
-# ee authentication
- if(T) {
- message("loading rgee")
-# rgee::ee_install_set_pyenv('/usr/bin/python3','r-reticulate', confirm = F)
- library(rgee)
- #Initializing with service account key
-
- service_account <- jsonlite::read_json(json_token)$client_email
- credentials <- ee$ServiceAccountCredentials(service_account, json_token)
- ee$Initialize(credentials = credentials)
+ # Ensure output directories exist early (before terra options)
+ dir.create("data/raw", recursive = TRUE, showWarnings = FALSE)
+ dir.create("data/temp", recursive = TRUE, showWarnings = FALSE)
+ dir.create("data/temp/terra", recursive = TRUE, showWarnings = FALSE)
+ dir.create("data/releases", recursive = TRUE, showWarnings = FALSE)
+ dir.create("data/target_outputs", recursive = TRUE, showWarnings = FALSE)
+
+ # GitHub release repository configuration
+ gh_repo_config <- list(
+ repo = "AdamWilsonLab/emma_envdata",
+ tag = "objects_current",
+ format = "qs",
+ cache_dir = "data/target_outputs/.tar_cache"
+ )
- #Setting up needed objects for rgee
+ # Set up GitHub release repository for storing targets
+ gh_repo <- tar_github_release_repo(
+ repo = gh_repo_config$repo,
+ tag = gh_repo_config$tag,
+ format = gh_repo_config$format,
+ cache_dir = gh_repo_config$cache_dir
+ )
- message("Initializing rgee")
+ tar_option_set(
+ packages = c("tidyverse", "stringr","knitr","sf","stars","units","geotargets",
+ "appeears", "terra", "smoothr", "janitor", "sfarrow", "jsonlite",
+ "piggyback", "qs", "arrow"),
+ resources = tar_resources(
+ repository_cas = tar_github_release_resources(
+ repo = gh_repo_config$repo,
+ tag = gh_repo_config$tag,
+ format = gh_repo_config$format,
+ cache_dir = gh_repo_config$cache_dir
+ )
+ )
+ )
- ee_Initialize(drive = TRUE,
- gcs = FALSE,
- use_oob = FALSE,
- drive_cred_path = json_token,
- gcs_cred_path = json_token,
- ee_cred_path = json_token)
+ terraOptions(tempdir = "data/temp/terra", memfrac = 0.6)
+ # geotargets_option_set(
+ # gdal_raster_driver = "netCDF",
+ # gdal_raster_creation_options = c("FORMAT=NC4", "COMPRESS=DEFLATE", "ZLEVEL=9"),
+ # gdal_vector_driver = "GPKG"
+ # )
- }
-# # Sys.setenv(GOOGLE_APPLICATION_CREDENTIALS = "secrets/ee-wilsonlab-emma-ef416058504a.json")
-# message("Starting tar_make()")
-# print("Starting tar_make() - print")
-
-# library(targets)
-# library(tarchetypes)
-# library(visNetwork)
-# library(future) #not sure why this is needed, but we get an error in some of the files without it
-# options(gargle_verbosity = "debug")
-# library(googledrive)
-# library(jsonlite)
-
-# library(jsonlite)
-# # tok <- fromJSON("secrets/ee-wilsonlab-emma-ef416058504a.json")
-# # print(tok$scopes) # or tok$scopes
-
-# library(reticulate)
-# # message("------ reticulate::py_discover_config() ------")
-# # print(py_discover_config())
-
-# # message("------ checking ee module availability ------")
-# # print(py_module_available("ee"))
-
-# # message("------ py_config() output ------")
-# # print(py_config())
-
-# #If running this locally, make sure to set up github credentials using gitcreds::gitcreds_set()
-
-# #devtools::install_github(repo = "bmaitner/rgee",
-# # ref = "noninteractive_auth")
-
-# # Ensure things are clean
-# unlink(file.path("data/temp/"), recursive = TRUE, force = TRUE)
-# unlink(file.path("data/raw_data/"), recursive = TRUE, force = TRUE)
-# message(paste("Objects:",ls(),collapse = "\n"))
-
-# # source all files in R folder
-# lapply(list.files("R",pattern="[.]R",full.names = T), source)
-# message(paste("Objects:",ls(),collapse = "\n")) # To make sure all packages are loaded
-
-
-# options(tidyverse.quiet = TRUE)
-# #options(clustermq.scheduler = "multicore")
-
-# tar_option_set(packages = c("cmdstanr", "posterior", "bayesplot", "tidyverse",
-# "stringr","knitr","sf","stars","units",
-# "cubelyr","rgee", "reticulate"))
-
-# #set JSON token location (should be authorized for drive and earth engine)
-# json_token <- "secrets/ee-wilsonlab-emma-ef416058504a.json"
-
-# # drive_auth(path = json_token)
-
-# # ee authentication
-# if(T) {
-# message("loading rgee")
-# py_run_string("import ee")
-# py_run_string("print(ee.__version__)")
-# # rgee::ee_install_set_pyenv('/usr/bin/python3','r-reticulate', confirm = F)
-# library(rgee)
-# print(packageVersion("rgee"))
-# options(rgee.verbose = TRUE)
-# options(gargle_verbosity = "debug")
-# #Initializing with service account key
-
-
-# # unlink("~/.config/earthengine", recursive = TRUE, force = TRUE)
-# #ee$Authenticate(auth_mode='appdefault', quiet=TRUE)
-# message("Authentication is completed")
-# # rgee::ee_clean_credentials()
-# service_account <- jsonlite::read_json(json_token)$client_email
-# credentials <- ee$ServiceAccountCredentials(service_account, json_token)
-# ee$Initialize(credentials=credentials)
-# message("Initialization is completed")
-
-# # point to your service-account JSON
-# # Sys.setenv(GOOGLE_APPLICATION_CREDENTIALS = json_token)
-
-# # preload Drive & GCS creds headlessly
-# #googledrive::drive_auth(path = json_token, cache = FALSE)
-# #googleCloudStorageR::gcs_auth(json_file = json_token)
-# #dir.create("~/.config/earthengine", recursive = TRUE, showWarnings = FALSE)
-# message("Before ee_Initialize")
-
-# # App-Default auth for rgee (no browser)
-# # drive_auth(path = json_token, cache = FALSE)
-# # gargle::gargle_oauth_cache()
-# # token <- gargle::credentials_service_account(
-# # path = json_token,
-# # scopes = NULL
-
-# # )
-# # googledrive::drive_auth(token = token)
-# ee_Authenticate(auth_mode='appdefault', quiet=TRUE) # , scopes='https://www.googleapis.com/auth/cloud-platform',
-# # ee_Initialize(
-# # # user= "20061abcbc1c6ecf51bd9cf7e37350f6_bmaitner",
-# # # # user = "emma-envdata@ee-wilsonlab-emma.iam.gserviceaccount.com",
-# # # credentials = "secrets/ee-wilsonlab-emma-ef416058504a.json",
-# # credentials = "/github/home/.config/earthengine/",
-# # # # drive = TRUE,
-# # # # gcs = FALSE,
-# # # project = "ee-wilsonlab-emma",
-# # # # auth_mode = 'service_account',
-# # auth_quiet = TRUE,
-# # quiet = TRUE
-# # )
-# #ee_clean_user_credentials()
-# #ee_install_upgrade()
-# # ee_Authenticate(auth_mode='appdefault', quiet=TRUE)
-
-# #ee_Authenticate()
-# ee_Initialize()
-# # #project = "ee-wilsonlab-emma",
-# # #scopes='https://www.googleapis.com/auth/devstorage.full_control',
-# # credentials=credentials,
-# # auth_mode = "gcloud",
-# # quiet = TRUE
-# # ) #auth_mode="appdefault", quiet = TRUEㅣ, credentials=credentials, project = "ee-wilsonlab-emma",
-# reticulate::py_last_error()
-# message("ee_Initialize is completed")
-# # unlink("~/.config/earthengine", recursive = TRUE, force = TRUE)
-# # unlink("~/.rgee", recursive = TRUE, force = TRUE)
-# # dir.create("~/.config/earthengine", recursive = TRUE, showWarnings = FALSE)
-# # file.create("~/.config/earthengine/rgee_sessioninfo.txt")
-# # options(rgee.session.info = FALSE)
-
-# #Setting up needed objects for rgee
-# message("Initializing rgee")
-
-# # ee_Initialize(
-# # service_account = "emma-envdata@ee-wilsonlab-emma.iam.gserviceaccount.com",
-# # credentials = "secrets/ee-wilsonlab-emma-ef416058504a.json",
-# # drive = TRUE,
-# # gcs = TRUE
-# # )
-# message("After ee_Initialize")
-# # # 3) JSON에서 서비스 계정 이메일 추출
-# # key_path <- Sys.getenv("GOOGLE_APPLICATION_CREDENTIALS")
-# # sa_email <- read_json(key_path)$client_email
-
-# # # 4) SaK(Service account Key)를 rgee 자격증명 폴더로 복사·검증
-# # ee_utils_sak_copy(
-# # sakfile = key_path,
-# # users = sa_email
-# # )
-# # ee_utils_sak_validate(
-# # users = sa_email,
-# # quiet = TRUE
-# # )
-
-# # # 5) Earth Engine 비대화형 초기화 (서비스 계정 모드)
-# # ee_Initialize(
-# # email = sa_email,
-# # project = "ee-wilsonlab-emma",
-# # auth_mode = "service_account",
-# # quiet = TRUE
-# # )
-
-# # # 6) rgee_sessioninfo.txt 생성 보장
-# # ee_sessioninfo(
-# # email = sa_email,
-# # user = sa_email
-# # )
-
-# # message("Earth Engine non-interactive initialization complete.")
-# }
+ ## Authenticate with AppEEARS
+ # source("R/appeears_auth.R")
+# Ensure things are clean
+# unlink(file.path("data/temp/"), recursive = TRUE, force = TRUE)
+# unlink(file.path("data/raw_data/", recursive = TRUE, force = TRUE))
+# message(paste("Objects:",ls(),collapse = "\n"))
list(
-
# #Prep needed files # start
-
tar_target(
- vegmap_shp, # 2018 National Vegetation Map http://bgis.sanbi.org/SpatialDataset/Detail/1674
- "data/manual_download/VEGMAP2018_AEA_16082019Final/NVM2018_AEA_V22_7_16082019_final.shp",
- format = "file"
+ vegmap_shp,
+ download_vegmap_release(
+ repo = "AdamWilsonLab/emma_envdata",
+ tag = "vegmap2024",
+ file = "NVM2024final_Shapefile.zip",
+ local_dir = "data/manual_download/NVM2024",
+ shapefile_name = "NVM2024Final_IEM5_12_07012025.shp"
+ ),
+ format = "file",
+ cue = tar_cue(mode = if (run_mode == "prime") "thorough" else "never")
),
tar_target(
remnants_shp,
"data/manual_download/RLE_2021_Remnants/RLE_Terr_2021_June2021_Remnants_ddw.shp",
- format = "file"
+ format="file",
+ cue = tar_cue(mode = if (run_mode == "prime") "thorough" else "never")
),
tar_target(
- sanbi_fires_shp,
- st_read("data/manual_download/All_Fires/All_Fires_20_21_gw.shp")
+ capenature_fires_shp,
+ "data/manual_download/All_fires_23_24_gw/All_fires_23_24_gw.shp",
+ format="file",
+ cue = tar_cue(mode = if (run_mode == "prime") "thorough" else "never")
),
tar_target(
- country,
- national_boundary()
- )
-,
+ country.parquet,
+ get_country(),
+ format = "file",
+ cue = tar_cue(mode = if (run_mode == "prime") "thorough" else "never")
+ ),
tar_target(
- vegmap,
- get_vegmap(vegmap_shp)
+ domain.parquet,
+ domain_define(vegmap = vegmap_shp, country = country.parquet),
+ format = "file",
+ cue = tar_cue(mode = if (run_mode == "prime") "thorough" else "never")
),
+ # Stable bounding box for downloads (50km buffer around domain)
+ # Never re-downloads unless manually invalidated, even if analysis domain changes
tar_target(
- domain,
- domain_define(vegmap = vegmap, country)
- )
-,
+ domain_bbox.parquet,
+ make_domain_bbox(domain.parquet, buffer_m = 50000, out_file = "data/target_outputs/domain_bbox.parquet"),
+ format = "file",
+ repository = gh_repo,
+ cue = tar_cue(mode = if (run_mode == "prime") "thorough" else "never")
+ ),
+ # Domain raster with pixel IDs, remnants, and distance to remnants (NetCDF with CF-1.8 metadata)
+ tar_target(
+ domain_nc,
+ domain_rasterize(
+ domain = sfarrow::st_read_parquet(domain.parquet),
+ remnants_shp = remnants_shp,
+ out_file = "data/raw/domain.nc"
+ ),
+ format = "file",
+ cue = tar_cue(mode = if (run_mode == "prime") "thorough" else "never")
+ # tar_invalidate(domain_nc) # run this to force recompute
-# # # # Infrequent updates via releases
+ ),
+ # Vegetation map raster with metadata
tar_target(
- alos_release,
- get_release_alos(temp_directory = "data/temp/raw_data/alos/",
- tag = "raw_static",
- domain = domain,
- json_token)
- )
-,
+ vegmap_nc,
+ data_vegmap(domain_raster = domain_nc,
+ vegmap_shp = vegmap_shp,
+ out_file = "data/raw/vegmap.nc"),
+ format = "file",
+ cue = tar_cue(mode = if (run_mode == "prime") "thorough" else "never")),
+# # # # Infrequent updates via releases
- tar_target(
- climate_chelsa_release,
- get_release_climate_chelsa(temp_directory = "data/temp/raw_data/climate_chelsa/",
- tag = "raw_static",
- domain = domain)
- )
-,
- tar_target(
- clouds_wilson_release,
- get_release_clouds_wilson(temp_directory = "data/temp/raw_data/clouds_wilson/",
- tag = "raw_static",
- domain,
- sleep_time = 180)
- ),
+ # tar_target(
+ # protected_area_distance_release,
+ # process_release_protected_area_distance(template_release,
+ # out_file = "protected_area_distance.tif",
+ # temp_directory = "data/temp/protected_area",
+ # out_tag = "processed_static")
+ # ),
+
+# tar_target(
+# alos_release,
+# get_release_alos(temp_directory = "data/temp/raw_data/alos/",
+# tag = "raw_static",
+# domain = domain,
+# json_token)
+# )
+#,
+
+ # tar_target(
+ # climate_chelsa_release,
+ # get_chelsa(temp_directory = "data/temp/raw_data/climate_chelsa/",
+ # tag = "raw_static",
+ # domain = domain)
+ # )#,
+
+ # tar_terra_rast(
+ # clouds_wilson_release,
+ # get_release_clouds_wilson(temp_directory = "data/temp/raw_data/clouds_wilson/",
+ # tag = "raw_static",
+ # domain,
+ # sleep_time = 180)
+ # ),
tar_target(
- elevation_nasadem_release,
- get_release_elevation_nasadem(temp_directory = "data/temp/raw_data/elevation_nasadem/",
- tag = "raw_static",
- domain)
+ elevation,
+ get_elevation(
+ domain_vector = sfarrow::st_read_parquet(domain.parquet),
+ domain_raster = domain_nc,
+ temp_directory = "data/temp/raw_data/elevation_nasadem/",
+ out_file = "data/raw/elevation_nasadem.nc"
+ ),
+ format="file",
+ cue = tar_cue(mode = if (run_mode == "prime") "thorough" else "never"),
)
-,
+#,
#Temporarily commented out, seems to be an issue with URL for landcover data at present
# tar_target(
@@ -308,12 +232,12 @@ list(
# domain = domain)
# ),
#
- tar_target(
- precipitation_chelsa_release,
- get_release_precipitation_chelsa(temp_directory = "data/temp/raw_data/precipitation_chelsa/",
- tag = "raw_static",
- domain = domain)
- ),
+ # tar_target(
+ # precipitation_chelsa_release,
+ # get_release_precipitation_chelsa(temp_directory = "data/temp/raw_data/precipitation_chelsa/",
+ # tag = "raw_static",
+ # domain = domain)
+ # )#,
# ## commented out soil_gcfr_release at present due to API/rdryad issues.
# ## Emailed dryad folks on 2024/01/04, it seems the API update broke RDryad
@@ -329,404 +253,294 @@ list(
#
# # # # # Frequent updates via releases
- tar_age(
- fire_modis_release,
- get_release_fire_modis(temp_directory = "data/temp/raw_data/fire_modis/",
- tag = "raw_fire_modis",
- domain = domain,
- max_layers = 5,
- sleep_time = 5,
- json_token = json_token,
- verbose = FALSE),
- #age = as.difftime(7, units = "days")
- #age = as.difftime(1, units = "days")
- age = as.difftime(0, units = "hours")
- ),
-
- tar_age(
- kndvi_modis_release,
- get_release_kndvi_modis(temp_directory = "data/temp/raw_data/kndvi_modis/",
- tag = "raw_kndvi_modis",
- domain = domain,
- max_layers = 5,
- sleep_time = 5,
- json_token = json_token,
- verbose = TRUE),
- age = as.difftime(7, units = "days")
- #age = as.difftime(1, units = "days")
- #age = as.difftime(0, units = "hours")
- ),
-
- tar_age(
- ndvi_modis_release,
- get_release_ndvi_modis(temp_directory = "data/temp/raw_data/ndvi_modis/",
- tag = "raw_ndvi_modis",
- domain = domain,
- max_layers = 12,
- sleep_time = 5,
- json_token = json_token),
- #age = as.difftime(7, units = "days")
- #age = as.difftime(1, units = "days")
- age = as.difftime(0, units = "hours")
- ),
-
- tar_age(
- ndvi_viirs_release,
- get_release_ndvi_viirs(temp_directory = "data/temp/raw_data/ndvi_viirs/",
- tag = "raw_ndvi_viirs",
- domain,
- max_layers = 3,
- sleep_time = 30,
- json_token = json_token),
- age = as.difftime(7, units = "days")
- #age = as.difftime(1, units = "days")
- #age = as.difftime(0, units = "hours")
- ),
-
-
- tar_age(
- ndvi_dates_modis_release,
- get_release_ndvi_dates_modis(temp_directory = "data/temp/raw_data/ndvi_dates_modis/",
- repo_tag = "raw_ndvi_dates_modis",
- domain = domain,
- max_layers = 5,
- sleep_time = 10,
- json_token = json_token),
- #age = as.difftime(7, units = "days")
- #age = as.difftime(1, units = "days")
- age = as.difftime(0, units = "hours")
- ),
-
- tar_age(
- ndvi_dates_viirs_release,
- get_release_ndvi_dates_viirs(temp_directory = "data/temp/raw_data/ndvi_dates_viirs/",
- tag = "raw_ndvi_dates_viirs",
- domain = domain,
- max_layers = 3,
- sleep_time = 30,
- json_token = json_token),
- age = as.difftime(7, units = "days")
- #age = as.difftime(1, units = "days")
- #age = as.difftime(0, units = "hours")
- ),
-
-
-
- tar_age(mean_ndvi_release,
- get_release_mean_ndvi_modis(temp_directory = "data/temp/raw_data/mean_ndvi_modis/",
- tag = "current",
- domain = domain,
- sleep_time = 1,
- json_token = json_token),
- #age = as.difftime(7, units = "days")
- #age = as.difftime(1, units = "days")
- age = as.difftime(0, units = "hours")
- ),
-
-# # # # tar_age(
-# # # # ndwi_modis_release,
-# # # # get_release_ndwi_modis(temp_directory = "data/temp/raw_data/NDWI_MODIS/",
-# # # # tag = "current",
-# # # # domain,
-# # # # drive_cred_path = json_token),
-# # # # age = as.difftime(7, units = "days")
-# # # # #age = as.difftime(1, units = "days")
-# # # # #age = as.difftime(0, units = "hours")
-# # # # ),
-# # #
-# # #
-# # #
-# # # # # # Fixing projection via releases
-
-
- tar_target(
- correct_fire_release_proj_and_extent,
- process_fix_modis_release_projection_and_extent(temp_directory = "data/temp/raw_data/fire_modis/",
- input_tag = "raw_fire_modis",
- output_tag = "clean_fire_modis",
- max_layers = NULL,
- sleep_time = 30,
- verbose = TRUE,
- ... = fire_modis_release)
- ),
-
- tar_target(
- correct_ndvi_release_proj_and_extent,
- process_fix_modis_release_projection_and_extent(temp_directory = "data/temp/raw_data/ndvi_modis/",
- input_tag = "raw_ndvi_modis",
- output_tag = "clean_ndvi_modis",
- max_layers = NULL,
- sleep_time = 30,
- verbose = TRUE,
- ... = ndvi_modis_release)
- ),
-
- tar_target(
- correct_ndvi_dates_release_proj_and_extent,
- process_fix_modis_release_projection_and_extent(temp_directory = "data/temp/raw_data/ndvi_dates_modis/",
- input_tag = "raw_ndvi_dates_modis",
- output_tag = "clean_ndvi_dates_modis",
- max_layers = NULL,
- sleep_time = 30,
- verbose = TRUE,
- ... = ndvi_dates_modis_release)
- ),
-
-
- tar_target(
- correct_ndvi_viirs_release_proj_and_extent,
- process_fix_modis_release_projection_and_extent(temp_directory = "data/temp/raw_data/ndvi_viirs/",
- input_tag = "raw_ndvi_viirs",
- output_tag = "clean_ndvi_viirs",
- max_layers = 30,
- sleep_time = 30,
- verbose = TRUE,
- ... = ndvi_viirs_release)
- ),
-
-
- tar_target(
- correct_ndvi_dates_viirs_release_proj_and_extent,
- process_fix_modis_release_projection_and_extent(temp_directory = "data/temp/raw_data/ndvi_dates_viirs/",
- input_tag = "raw_ndvi_dates_viirs",
- output_tag = "clean_ndvi_dates_viirs",
- max_layers = 30,
- sleep_time = 30,
- verbose = TRUE,
- ... = ndvi_dates_viirs_release)
- ),
-
- tar_target(
- correct_kndvi_release_proj_and_extent,
- process_fix_modis_release_projection_and_extent(temp_directory = "data/temp/raw_data/kndvi_modis/",
- input_tag = "raw_kndvi_modis",
- output_tag = "clean_kndvi_modis",
- max_layers = 30,
- sleep_time = 45,
- verbose = TRUE,
- ... = kndvi_modis_release)
- ), # second chunk
-
-# # # Processing via release
-
- tar_target(
- fire_doy_to_unix_date_release,
- process_release_fire_doy_to_unix_date(input_tag = "clean_fire_modis",
- output_tag = "processed_fire_dates",
- temp_directory = "data/temp/processed_data/fire_dates/",
- sleep_time = 20,
- template_release = template_release,
- ... = correct_fire_release_proj_and_extent)
- ),
-
- tar_target(
- burn_date_to_last_burned_date_release,
- process_release_burn_date_to_last_burned_date(input_tag = "processed_fire_dates",
- output_tag = "processed_most_recent_burn_dates",
- temp_directory_input = "data/temp/processed_data/fire_dates/",
- temp_directory_output = "data/temp/processed_data/most_recent_burn_dates/",
- sleep_time = 180,
- sanbi_sf = sanbi_fires_shp,
- expiration_date = NULL,
- ... = fire_doy_to_unix_date_release)
- ),
-
-
- tar_target(
- ndvi_relative_days_since_fire_release,
- process_release_ndvi_relative_days_since_fire(temp_input_ndvi_date_folder = "data/temp/raw_data/ndvi_dates_modis/",
- temp_input_fire_date_folder = "data/temp/processed_data/most_recent_burn_dates/",
- temp_fire_output_folder = "data/temp/processed_data/ndvi_relative_time_since_fire/",
- input_fire_dates_tag = "processed_most_recent_burn_dates",
- input_modis_dates_tag = "clean_ndvi_dates_modis",
- output_tag = "processed_ndvi_relative_days_since_fire",
- sleep_time = 60,
- ... = burn_date_to_last_burned_date_release,
- ... = correct_ndvi_dates_release_proj_and_extent)
- ),
-
- tar_target(
- template_release,
- get_release_template_raster(input_tag = "clean_ndvi_modis",
- output_tag = "raw_static",
- temp_directory = "data/temp/template",
- ... = correct_ndvi_release_proj_and_extent)
- ),
-
- tar_target(
- remnants_release,
- domain_remnants_release(domain = domain,
- remnants_shp = remnants_shp,
- template_release,
- temp_directory = "data/temp/remnants",
- out_file = "remnants.tif",
- out_tag = "processed_static")
- ), # 3-1
-
- tar_target(
- remnant_distance_release,
- domain_distance_release(remnants_release = remnants_release,
- out_file = "remnant_distance.tif",
- temp_directory = "data/temp/remnants",
- out_tag = "processed_static")
- ),
-
- tar_target(
- protected_area_distance_release,
- process_release_protected_area_distance(template_release,
- out_file = "protected_area_distance.tif",
- temp_directory = "data/temp/protected_area",
- out_tag = "processed_static")
- ),
-
- tar_target(
- projected_alos_release,
- process_release_alos(input_tag = "raw_static",
- output_tag = "processed_static",
- temp_directory = "data/temp/raw_data/alos/",
- template_release = template_release,
- sleep_time = 60,
- ... = alos_release)
- ),
-
- tar_target(
- projected_climate_chelsa_release,
- process_release_climate_chelsa(input_tag = "raw_static",
- output_tag = "processed_static",
- temp_directory = "data/temp/raw_data/climate_chelsa/",
- template_release = template_release,
- ... = climate_chelsa_release)
- ),
-
- tar_target(
- projected_clouds_wilson_release,
- process_release_clouds_wilson(input_tag = "raw_static",
- output_tag = "processed_static",
- temp_directory = "data/temp/raw_data/clouds_wilson/",
- template_release = template_release,
- sleep_time = 180,
- ... = clouds_wilson_release)
- ), # 3-2
-
- tar_target(
- projected_elevation_nasadem_release,
- process_release_elevation_nasadem(input_tag = "raw_static",
- output_tag = "processed_static",
- temp_directory = "data/temp/raw_data/elevation_nasadem/",
- template_release = template_release,
- sleep_time = 0,
- ... = elevation_nasadem_release)
- ),
-
- tar_target(
- projected_landcover_za_release,
- process_release_landcover_za(input_tag = "raw_static",
- output_tag = "processed_static",
- temp_directory = "data/temp/raw_data/landcover_za/",
- template_release,
- sleep_time = 60,
- ... = landcover_za_release)
- )
- ,
-
- tar_target(
- projected_precipitation_chelsa_release,
- process_release_precipitation_chelsa(input_tag = "raw_static",
- output_tag = "processed_static",
- temp_directory = "data/temp/raw_data/precipitation_chelsa/",
- template_release,
- sleep_time = 60,
- ... = precipitation_chelsa_release)
-
- ),
-
- tar_target(
- projected_soil_gcfr_release,
- process_release_soil_gcfr(input_tag = "raw_static",
- output_tag = "processed_static",
- temp_directory = "data/temp/raw_data/soil_gcfr/",
- template_release,
- sleep_time = 60,
- ... = soil_gcfr_release)
-
- ),
-
- tar_target(
- vegmap_modis_proj,
- process_release_biome_raster(template_release = template_release,
- vegmap_shp = vegmap_shp,
- domain = domain,
- temp_directory = "data/temp/raw_data/vegmap_raster/",
- sleep_time = 10)
-
- ),
-
-
-
-
-# # # # # Prep model data
-
- tar_target(
- stable_data_release,
- process_release_stable_data(temp_directory = "data/temp/processed_data/static/",
- input_tag = "processed_static",
- output_tag = "current",
- sleep_time = 120,
- ... = projected_precipitation_chelsa_release,
- ... = projected_landcover_za_release,
- ... = projected_elevation_nasadem_release,
- ... = projected_clouds_wilson_release,
- ... = projected_climate_chelsa_release,
- ... = projected_alos_release,
- ... = remnant_distance_release,
- ... = protected_area_distance_release,
- ... = projected_soil_gcfr_release)
- ),
-
- tar_target(
- ndvi_to_parquet_release,
- process_release_dynamic_data_to_parquet(temp_directory = "data/temp/raw_data/ndvi_modis/",
- input_tag = "clean_ndvi_modis",
- output_tag = "current",
- variable_name = "ndvi",
- sleep_time = 30,
- ... = correct_ndvi_release_proj_and_extent)
- ),
-
- tar_target(
- fire_dates_to_parquet_release,
- process_release_dynamic_data_to_parquet(temp_directory = "data/temp/processed_data/ndvi_relative_time_since_fire/",
- input_tag = "processed_ndvi_relative_days_since_fire",
- output_tag = "current",
- variable_name = "time_since_fire",
- sleep_time = 30,
- ... = ndvi_relative_days_since_fire_release)
- ),
-
- tar_target(
- most_recent_fire_dates_to_parquet_release,
- process_release_dynamic_data_to_parquet(temp_directory = "data/temp/processed_data/most_recent_burn_dates/",
- input_tag = "processed_most_recent_burn_dates",
- output_tag = "current",
- variable_name = "most_recent_burn_dates",
- sleep_time = 30,
- ... = burn_date_to_last_burned_date_release)
- ),
-
-# periodically clean up google drive folder
-
- tar_age(
- remove_ee_backup,
- clean_up(),
- #age = as.difftime(7, units = "days")
- age = as.difftime(0, units = "hours")
- )
-
+# tar_age(
+# fire_modis_release,
+# get_release_fire_modis_appeears(temp_directory = "data/temp/raw_data/fire_modis/",
+# tag = "raw_fire_modis_nc",
+# domain = domain,
+# max_layers = 5,
+# sleep_time = 5,
+# verbose = TRUE),
+# age = as.difftime(7, units = "days")
+# #age = as.difftime(1, units = "days")
+# #age = as.difftime(0, units = "hours"),
+# cue = tar_cue(mode = if (run_mode == "update") "always" else "thorough")
+# ),
+
+# tar_age(
+# ndvi_modis_release,
+# get_release_ndvi_modis_appeears(temp_directory = "data/temp/raw_data/ndvi_modis/",
+# tag = "raw_ndvi_modis_nc",
+# domain = domain,
+# sleep_time = 5,
+# verbose = TRUE),
+# age = as.difftime(7, units = "days")
+# ),
+
+# tar_age(
+# ndvi_viirs_release,
+# get_release_ndvi_viirs_appeears(temp_directory = "data/temp/raw_data/ndvi_viirs/",
+# tag = "raw_ndvi_viirs_nc",
+# domain,
+# max_layers = 3,
+# sleep_time = 1),
+# age = as.difftime(7, units = "days")
+# #age = as.difftime(1, units = "days")
+# #age = as.difftime(0, units = "hours")
+# ),
+
+# # # # # # # Fixing projection via releases
+
+
+# tar_target(
+# correct_fire_release_proj_and_extent,
+# process_fix_modis_release_projection_and_extent(temp_directory = "data/temp/raw_data/fire_modis/",
+# input_tag = "raw_fire_modis",
+# output_tag = "clean_fire_modis",
+# max_layers = NULL,
+# sleep_time = 30,
+# verbose = TRUE,
+# ... = fire_modis_release)
+# ),
+
+# tar_target(
+# correct_ndvi_release_proj_and_extent,
+# process_fix_modis_release_projection_and_extent(temp_directory = "data/temp/raw_data/ndvi_modis/",
+# input_tag = "raw_ndvi_modis",
+# output_tag = "clean_ndvi_modis",
+# max_layers = NULL,
+# sleep_time = 30,
+# verbose = TRUE,
+# ... = ndvi_modis_release)
+# ),
+
+# tar_target(
+# correct_ndvi_dates_release_proj_and_extent,
+# process_fix_modis_release_projection_and_extent(temp_directory = "data/temp/raw_data/ndvi_dates_modis/",
+# input_tag = "raw_ndvi_dates_modis",
+# output_tag = "clean_ndvi_dates_modis",
+# max_layers = NULL,
+# sleep_time = 30,
+# verbose = TRUE,
+# ... = ndvi_dates_modis_release)
+# ),
+
+
+# tar_target(
+# correct_ndvi_viirs_release_proj_and_extent,
+# process_fix_modis_release_projection_and_extent(temp_directory = "data/temp/raw_data/ndvi_viirs/",
+# input_tag = "raw_ndvi_viirs",
+# output_tag = "clean_ndvi_viirs",
+# max_layers = 30,
+# sleep_time = 30,
+# verbose = TRUE,
+# ... = ndvi_viirs_release)
+# ),
+
+
+# tar_target(
+# correct_ndvi_dates_viirs_release_proj_and_extent,
+# process_fix_modis_release_projection_and_extent(temp_directory = "data/temp/raw_data/ndvi_dates_viirs/",
+# input_tag = "raw_ndvi_dates_viirs",
+# output_tag = "clean_ndvi_dates_viirs",
+# max_layers = 30,
+# sleep_time = 30,
+# verbose = TRUE,
+# ... = ndvi_dates_viirs_release)
+# ),
+
+# tar_target(
+# correct_kndvi_release_proj_and_extent,
+# process_fix_modis_release_projection_and_extent(temp_directory = "data/temp/raw_data/kndvi_modis/",
+# input_tag = "raw_kndvi_modis",
+# output_tag = "clean_kndvi_modis",
+# max_layers = 30,
+# sleep_time = 45,
+# verbose = TRUE,
+# ... = kndvi_modis_release)
+# ), # second chunk
+
+# # # # Processing via release
+
+# tar_target(
+# fire_doy_to_unix_date_release,
+# process_release_fire_doy_to_unix_date(input_tag = "clean_fire_modis",
+# output_tag = "processed_fire_dates",
+# temp_directory = "data/temp/processed_data/fire_dates/",
+# sleep_time = 20,
+# template_release = template_release,
+# ... = correct_fire_release_proj_and_extent)
+# ),
+
+# tar_target(
+# burn_date_to_last_burned_date_release,
+# process_release_burn_date_to_last_burned_date(input_tag = "processed_fire_dates",
+# output_tag = "processed_most_recent_burn_dates",
+# temp_directory_input = "data/temp/processed_data/fire_dates/",
+# temp_directory_output = "data/temp/processed_data/most_recent_burn_dates/",
+# sleep_time = 180,
+# sanbi_sf = sanbi_fires_shp,
+# expiration_date = NULL,
+# ... = fire_doy_to_unix_date_release)
+# ),
+
+
+# tar_target(
+# ndvi_relative_days_since_fire_release,
+# process_release_ndvi_relative_days_since_fire(temp_input_ndvi_date_folder = "data/temp/raw_data/ndvi_dates_modis/",
+# temp_input_fire_date_folder = "data/temp/processed_data/most_recent_burn_dates/",
+# temp_fire_output_folder = "data/temp/processed_data/ndvi_relative_time_since_fire/",
+# input_fire_dates_tag = "processed_most_recent_burn_dates",
+# input_modis_dates_tag = "clean_ndvi_dates_modis",
+# output_tag = "processed_ndvi_relative_days_since_fire",
+# sleep_time = 60,
+# ... = burn_date_to_last_burned_date_release,
+# ... = correct_ndvi_dates_release_proj_and_extent)
+# ),
+
+# tar_target(
+# template_release,
+# get_release_template_raster(input_tag = "clean_ndvi_modis",
+# output_tag = "raw_static",
+# temp_directory = "data/temp/template",
+# ... = correct_ndvi_release_proj_and_extent)
+# ),
+
+
+
+# tar_target(
+# projected_alos_release,
+# process_release_alos(input_tag = "raw_static",
+# output_tag = "processed_static",
+# temp_directory = "data/temp/raw_data/alos/",
+# template_release = template_release,
+# sleep_time = 60,
+# ... = alos_release)
+# ),
+
+# tar_target(
+# projected_climate_chelsa_release,
+# process_release_climate_chelsa(input_tag = "raw_static",
+# output_tag = "processed_static",
+# temp_directory = "data/temp/raw_data/climate_chelsa/",
+# template_release = template_release,
+# ... = climate_chelsa_release)
+# ),
+
+# tar_target(
+# projected_clouds_wilson_release,
+# process_release_clouds_wilson(input_tag = "raw_static",
+# output_tag = "processed_static",
+# temp_directory = "data/temp/raw_data/clouds_wilson/",
+# template_release = template_release,
+# sleep_time = 180,
+# ... = clouds_wilson_release)
+# ), # 3-2
+
+# tar_target(
+# projected_elevation_nasadem_release,
+# process_release_elevation_nasadem(input_tag = "raw_static",
+# output_tag = "processed_static",
+# temp_directory = "data/temp/raw_data/elevation_nasadem/",
+# template_release = template_release,
+# sleep_time = 0,
+# ... = elevation_nasadem_release)
+# ),
+
+# tar_target(
+# projected_landcover_za_release,
+# process_release_landcover_za(input_tag = "raw_static",
+# output_tag = "processed_static",
+# temp_directory = "data/temp/raw_data/landcover_za/",
+# template_release,
+# sleep_time = 60,
+# ... = landcover_za_release)
+# )
+# ,
+
+# tar_target(
+# projected_precipitation_chelsa_release,
+# process_release_precipitation_chelsa(input_tag = "raw_static",
+# output_tag = "processed_static",
+# temp_directory = "data/temp/raw_data/precipitation_chelsa/",
+# template_release,
+# sleep_time = 60,
+# ... = precipitation_chelsa_release)
+
+# ),
+
+# tar_target(
+# projected_soil_gcfr_release,
+# process_release_soil_gcfr(input_tag = "raw_static",
+# output_tag = "processed_static",
+# temp_directory = "data/temp/raw_data/soil_gcfr/",
+# template_release,
+# sleep_time = 60,
+# ... = soil_gcfr_release)
+
+# ),
+
+# tar_target(
+# vegmap_modis_proj,
+# process_release_biome_raster(template_release = template_release,
+# vegmap_shp = vegmap_shp,
+# domain = domain,
+# temp_directory = "data/temp/raw_data/vegmap_raster/",
+# sleep_time = 10)
+
+# ),
+
+
+
+
+# # # # # # Prep model data
+
+# tar_target(
+# stable_data_release,
+# process_release_stable_data(temp_directory = "data/temp/processed_data/static/",
+# input_tag = "processed_static",
+# output_tag = "current",
+# sleep_time = 120,
+# ... = projected_precipitation_chelsa_release,
+# ... = projected_landcover_za_release,
+# ... = projected_elevation_nasadem_release,
+# ... = projected_clouds_wilson_release,
+# ... = projected_climate_chelsa_release,
+# ... = projected_alos_release,
+# ... = remnant_distance_release,
+# ... = protected_area_distance_release,
+# ... = projected_soil_gcfr_release)
+# ),
+
+# tar_target(
+# ndvi_to_parquet_release,
+# process_release_dynamic_data_to_parquet(temp_directory = "data/temp/raw_data/ndvi_modis/",
+# input_tag = "clean_ndvi_modis",
+# output_tag = "current",
+# variable_name = "ndvi",
+# sleep_time = 30,
+# ... = correct_ndvi_release_proj_and_extent)
+# ),
+
+# tar_target(
+# fire_dates_to_parquet_release,
+# process_release_dynamic_data_to_parquet(temp_directory = "data/temp/processed_data/ndvi_relative_time_since_fire/",
+# input_tag = "processed_ndvi_relative_days_since_fire",
+# output_tag = "current",
+# variable_name = "time_since_fire",
+# sleep_time = 30,
+# ... = ndvi_relative_days_since_fire_release)
+# ),
+
+# tar_target(
+# most_recent_fire_dates_to_parquet_release,
+# process_release_dynamic_data_to_parquet(temp_directory = "data/temp/processed_data/most_recent_burn_dates/",
+# input_tag = "processed_most_recent_burn_dates",
+# output_tag = "current",
+# variable_name = "most_recent_burn_dates",
+# sleep_time = 30,
+# ... = burn_date_to_last_burned_date_release)
+# )
)
-
-
-
-
-################################################################################
diff --git a/_targets/.gitignore b/_targets/.gitignore
index a8c51cda..23ab7917 100644
--- a/_targets/.gitignore
+++ b/_targets/.gitignore
@@ -1,3 +1,9 @@
+# CAUTION: do not edit this file by hand!
+# _targets/objects/ may have large data files,
+# and _targets/meta/process may have sensitive information.
+# It is good pratice to either commit nothing from _targets/,
+# or if your data is not too sensitive,
+# commit only _targets/meta/meta.
*
!.gitignore
!meta
diff --git a/_targets/meta/meta b/_targets/meta/meta
new file mode 100644
index 00000000..455a8760
--- /dev/null
+++ b/_targets/meta/meta
@@ -0,0 +1,196 @@
+name|type|data|command|depend|seed|path|time|size|bytes|format|repository|iteration|parent|children|seconds|warnings|error
+correct_ndvi_dates_release_proj_and_extent|stem|49be87cd8aaf3e80|1d0f5f39ef47d1b6|edb3a13ae4cb1ccc|-1844360325||t20458.6135571947s|s63b|63|rds|local|vector|||17.619||
+remove_ee_backup|stem||befe0ca90eb2c488|2c530c1562a7fbd1|-773029837||t20458.6135575072s||0|rds|local|vector|||0.003||could not find function 'clean_up'
+vegmap|stem|0c98d327f6beefbe|f82077cc150b71ed|774ecf7dbe3e5980|986433229||t20458.6208086331s|s141541376b|141541376|format_custom&read=ewogICAgaWYgKCJHUEtHIiA9PSAiRVNSSSBTaGFwZWZpbGUiKSB7CiAgICAgICAgdGVycmE6OnZlY3QocGFzdGUwKCIvdnNpemlwL3siLCBwYXRoLCAifSIpKQogICAgfQogICAgZWxzZSB7CiAgICAgICAgdGVycmE6OnZlY3QocGF0aCkKICAgIH0KfQ&write=ewogICAgZG8uY2FsbCh0ZXJyYTo6d3JpdGVWZWN0b3IsIGMobGlzdCh4ID0gb2JqZWN0LCBmaWxlbmFtZSA9IGlmZWxzZSgiR1BLRyIgPT0gCiAgICAgICAgIkVTUkkgU2hhcGVmaWxlIiwgeWVzID0gcGFzdGUwKHBhdGgsICIuc2h6IiksIG5vID0gcGF0aCksIAogICAgICAgIGZpbGV0eXBlID0gIkdQS0ciLCBvdmVyd3JpdGUgPSBUUlVFLCBvcHRpb25zID0gIkVOQ09ESU5HPVVURi04IiksIAogICAgICAgIGxpc3QoKSkpCiAgICBpZiAoIkdQS0ciID09ICJFU1JJIFNoYXBlZmlsZSIpIHsKICAgICAgICBmaWxlLnJlbmFtZShwYXN0ZTAocGF0aCwgIi5zaHoiKSwgcGF0aCkKICAgIH0KfQ&marshal=dGVycmE6OndyYXAob2JqZWN0KQ&unmarshal=dGVycmE6OnVud3JhcChvYmplY3Qp&convert=©=&repository=|local|list|||18.36|PROJ: proj_create_from_name: Cannot find proj.db (GDAL error 1)|
+remnants_shp|stem|d03b72197917a3dc|4adc3961bf1f92a3|2c530c1562a7fbd1|977857804|data/manual_download/RLE_2021_Remnants/RLE_Terr_2021_June2021_Remnants_ddw.shp|t20445.6915274758s|s726393404b|726393404|file|local|vector|||0.064||
+country|stem|fb8900f4b7b88ca5|53feefadcddcbd52|80f7245c40a53951|-430139696||t20462.6945185888s|s4964352b|4964352|format_custom&read=ewogICAgaWYgKCJHUEtHIiA9PSAiRVNSSSBTaGFwZWZpbGUiKSB7CiAgICAgICAgdGVycmE6OnZlY3QocGFzdGUwKCIvdnNpemlwL3siLCBwYXRoLCAifSIpKQogICAgfQogICAgZWxzZSB7CiAgICAgICAgdGVycmE6OnZlY3QocGF0aCkKICAgIH0KfQ&write=ewogICAgZG8uY2FsbCh0ZXJyYTo6d3JpdGVWZWN0b3IsIGMobGlzdCh4ID0gb2JqZWN0LCBmaWxlbmFtZSA9IGlmZWxzZSgiR1BLRyIgPT0gCiAgICAgICAgIkVTUkkgU2hhcGVmaWxlIiwgeWVzID0gcGFzdGUwKHBhdGgsICIuc2h6IiksIG5vID0gcGF0aCksIAogICAgICAgIGZpbGV0eXBlID0gIkdQS0ciLCBvdmVyd3JpdGUgPSBUUlVFLCBvcHRpb25zID0gIkVOQ09ESU5HPVVURi04IiksIAogICAgICAgIGxpc3QoKSkpCiAgICBpZiAoIkdQS0ciID09ICJFU1JJIFNoYXBlZmlsZSIpIHsKICAgICAgICBmaWxlLnJlbmFtZShwYXN0ZTAocGF0aCwgIi5zaHoiKSwgcGF0aCkKICAgIH0KfQ&marshal=dGVycmE6OndyYXAob2JqZWN0KQ&unmarshal=dGVycmE6OnVud3JhcChvYmplY3Qp&convert=©=&repository=|local|list|||13.132||
+domain|stem|e6d498ad1ef6d5de|3b892a93e2976da1|079d4f875c5b950e|-103757746||t20462.6947265009s|s3072000b|3072000|format_custom&read=ewogICAgaWYgKCJHUEtHIiA9PSAiRVNSSSBTaGFwZWZpbGUiKSB7CiAgICAgICAgdGVycmE6OnZlY3QocGFzdGUwKCIvdnNpemlwL3siLCBwYXRoLCAifSIpKQogICAgfQogICAgZWxzZSB7CiAgICAgICAgdGVycmE6OnZlY3QocGF0aCkKICAgIH0KfQ&write=ewogICAgZG8uY2FsbCh0ZXJyYTo6d3JpdGVWZWN0b3IsIGMobGlzdCh4ID0gb2JqZWN0LCBmaWxlbmFtZSA9IGlmZWxzZSgiR1BLRyIgPT0gCiAgICAgICAgIkVTUkkgU2hhcGVmaWxlIiwgeWVzID0gcGFzdGUwKHBhdGgsICIuc2h6IiksIG5vID0gcGF0aCksIAogICAgICAgIGZpbGV0eXBlID0gIkdQS0ciLCBvdmVyd3JpdGUgPSBUUlVFLCBvcHRpb25zID0gIkVOQ09ESU5HPVVURi04IiksIAogICAgICAgIGxpc3QoKSkpCiAgICBpZiAoIkdQS0ciID09ICJFU1JJIFNoYXBlZmlsZSIpIHsKICAgICAgICBmaWxlLnJlbmFtZShwYXN0ZTAocGF0aCwgIi5zaHoiKSwgcGF0aCkKICAgIH0KfQ&marshal=dGVycmE6OndyYXAob2JqZWN0KQ&unmarshal=dGVycmE6OnVud3JhcChvYmplY3Qp&convert=©=&repository=|local|list|||17.511||
+process_release_biome_raster|function|a0b27b083f7ed85e|||||||||||||||
+domain_raster|stem|f326af31f3a5d493|ff3f8f4fb81299ee|f6d4e813438fd81c|1482803489||t20462.7181557878s|s202093691b|202093691|format_custom&read=dGVycmE6OnJhc3QocGF0aCk&write=ewogICAgZG8uY2FsbCh0ZXJyYTo6d3JpdGVSYXN0ZXIsIGMobGlzdChvYmplY3QsIGZpbGVuYW1lID0gcGF0aCwgCiAgICAgICAgZmlsZXR5cGUgPSAibmV0Q0RGIiwgb3ZlcndyaXRlID0gVFJVRSwgZ2RhbCA9IE5VTEwpLCAKICAgICAgICBsaXN0KCkpKQp9&marshal=dGVycmE6OndyYXAob2JqZWN0KQ&unmarshal=dGVycmE6OnVud3JhcChvYmplY3Qp&convert=©=&repository=|local|list|||1520.736|PROJ: proj_create_from_name: Cannot find proj.db (GDAL error 1). PROJ: proj_create_from_database: Cannot find proj.db (GDAL error 1). attribute variables are assumed to be spatially constant throughout all geometries. PROJ: proj_create_from_name: Cannot find proj.db (GDAL error 1). PROJ: proj_create_from_database: Cannot find proj.db (GDAL error 1). [rast] unknown extent|
+vegmap_raster|stem||7c1fa6d4fe95368b|ea12d674ae33b1c9|1016620066||t20462.7183129309s||0|format_custom&read=dGVycmE6OnJhc3QocGF0aCk&write=ewogICAgZG8uY2FsbCh0ZXJyYTo6d3JpdGVSYXN0ZXIsIGMobGlzdChvYmplY3QsIGZpbGVuYW1lID0gcGF0aCwgCiAgICAgICAgZmlsZXR5cGUgPSAibmV0Q0RGIiwgb3ZlcndyaXRlID0gVFJVRSwgZ2RhbCA9IE5VTEwpLCAKICAgICAgICBsaXN0KCkpKQp9&marshal=dGVycmE6OndyYXAob2JqZWN0KQ&unmarshal=dGVycmE6OnVud3JhcChvYmplY3Qp&convert=©=&repository=|local|list|||13.393||crs not found: is it missing?
+climate_chelsa_release|stem|88f9252bc7d9ed1a|4c496a15fe2faf91|97208ffa76a10d39|-670781068||t20461.8983898142s||81|rds|local|vector|||7.083|Failed to create release: 'raw_static' already exists!|object 'domain' not found
+domain.nc|stem|314f0006ad321020|f4caf66b195bedfe|7d2ec7c5e07cf5d8|797368847||t20462.7618461726s|s3623507b|3623507|format_custom&read=dGVycmE6OnJhc3QocGF0aCk&write=ewogICAgZG8uY2FsbCh0ZXJyYTo6d3JpdGVSYXN0ZXIsIGMobGlzdChvYmplY3QsIGZpbGVuYW1lID0gcGF0aCwgCiAgICAgICAgZmlsZXR5cGUgPSAibmV0Q0RGIiwgb3ZlcndyaXRlID0gVFJVRSwgZ2RhbCA9IGMoIkZPUk1BVD1OQzQiLCAKICAgICAgICAiQ09NUFJFU1M9REVGTEFURSIsICJaTEVWRUw9OSIpKSwgbGlzdCgpKSkKfQ&marshal=dGVycmE6OndyYXAob2JqZWN0KQ&unmarshal=dGVycmE6OnVud3JhcChvYmplY3Qp&convert=©=&repository=|local|list|||1585.126|PROJ: proj_create_from_name: Cannot find proj.db (GDAL error 1). PROJ: proj_create_from_database: Cannot find proj.db (GDAL error 1). [writeRaster] consider writeCDF to write ncdf files|
+vegmap.nc|stem||f1094a5facfce02e|98fce78e25b3b6cb|-1931934530||t20462.7644244077s||0|format_custom&read=dGVycmE6OnJhc3QocGF0aCk&write=ewogICAgZG8uY2FsbCh0ZXJyYTo6d3JpdGVSYXN0ZXIsIGMobGlzdChvYmplY3QsIGZpbGVuYW1lID0gcGF0aCwgCiAgICAgICAgZmlsZXR5cGUgPSAibmV0Q0RGIiwgb3ZlcndyaXRlID0gVFJVRSwgZ2RhbCA9IGMoIkZPUk1BVD1OQzQiLCAKICAgICAgICAiQ09NUFJFU1M9REVGTEFURSIsICJaTEVWRUw9OSIpKSwgbGlzdCgpKSkKfQ&marshal=dGVycmE6OndyYXAob2JqZWN0KQ&unmarshal=dGVycmE6OnVud3JhcChvYmplY3Qp&convert=©=&repository=|local|list|||222.555|attribute variables are assumed to be spatially constant throughout all geometries. PROJ: proj_create_from_name: Cannot find proj.db (GDAL error 1). PROJ: proj_create_from_database: Cannot find proj.db (GDAL error 1). PROJ: proj_create_from_name: Cannot find proj.db (GDAL error 1). PROJ: proj_create_from_database: Cannot find proj.db (GDAL error 1). PROJ: proj_create_from_name: Cannot find proj.db (GDAL error 1). PROJ: proj_create_from_database: Cannot find proj.db (GDAL error 1)|[==] raster has no values
+national_boundary|function|8e86fb14d36f5061|||||||||||||||
+get_domain|function|73c97bc96bfedda4|||||||||||||||
+domain_distance|function|939a115603a9b4df|||||||||||||||
+domain_remnants|function|4c6497b244bdbc02|||||||||||||||
+domain_remnants_release|function|d06ba69c89670801|||||||||||||||
+domain_distance_release|function|c9d2a5f3c74dfc11|||||||||||||||
+capenature_fires_shp|stem|13d0029b14d0e2de|cb2c5823b318874b|2c530c1562a7fbd1|-1931602475|data/manual_download/All_fires_23_24_gw/All_fires_23_24_gw.shp|t19949.7370138889s|s15173392b|15173392|file|local|vector|||0.074||
+domain.tif|stem|e51bb36f9f6f3a70|f4caf66b195bedfe|df22595d26cedbec|1539589734||t20462.8142474563s|s6091277b|6091277|format_custom&read=ewogICAgdG1wIDwtIHRlbXBkaXIoKQogICAgemlwOjp1bnppcCh6aXBmaWxlID0gcGF0aCwgZXhkaXIgPSB0bXApCiAgICB0ZXJyYTo6cmFzdChmaWxlLnBhdGgodG1wLCBiYXNlbmFtZShwYXRoKSkpCn0&write=ewogICAgdG1wIDwtIHdpdGhyOjpsb2NhbF90ZW1wZGlyKCkKICAgIHJhc3Rlcl90bXBfZmlsZSA8LSBmaWxlLnBhdGgodG1wLCBiYXNlbmFtZShwYXRoKSkKICAgIHppcF90bXBfZmlsZSA8LSBmaWxlLnBhdGgodG1wLCAib2JqZWN0LnppcCIpCiAgICBkby5jYWxsKHRlcnJhOjp3cml0ZVJhc3RlciwgYyhsaXN0KHggPSBvYmplY3QsIGZpbGVuYW1lID0gcmFzdGVyX3RtcF9maWxlLCAKICAgICAgICBmaWxldHlwZSA9ICJHVGlmZiIsIG92ZXJ3cml0ZSA9IFRSVUUsIGdkYWwgPSBjKCJDT01QUkVTUz1ERUZMQVRFIiwgCiAgICAgICAgIlpMRVZFTD05IikpLCBsaXN0KCkpKQogICAgcmFzdGVyX2ZpbGVzIDwtIGxpc3QuZmlsZXMocGF0aCA9IHRtcCwgZnVsbC5uYW1lcyA9IFRSVUUpCiAgICB6aXA6OnppcCh6aXBmaWxlID0gemlwX3RtcF9maWxlLCBmaWxlcyA9IHJhc3Rlcl9maWxlcywgY29tcHJlc3Npb25fbGV2ZWwgPSAxLCAKICAgICAgICBtb2RlID0gImNoZXJyeS1waWNrIiwgcm9vdCA9IHRtcCkKICAgIGZpbGUuY29weSh6aXBfdG1wX2ZpbGUsIHBhdGgpCn0&marshal=dGVycmE6OndyYXAob2JqZWN0KQ&unmarshal=dGVycmE6OnVud3JhcChvYmplY3Qp&convert=©=&repository=|local|list|||1370.939|PROJ: proj_create_from_name: Cannot find proj.db (GDAL error 1). PROJ: proj_create_from_database: Cannot find proj.db (GDAL error 1). PROJ: proj_create_from_name: Cannot find proj.db (GDAL error 1). PROJ: proj_create_from_database: Cannot find proj.db (GDAL error 1)|
+vegmap.tif|stem||ba090534dd7ca5ef|9c77befa3fc97dcc|-1280618250||t20462.816821373s||0|format_custom&read=ewogICAgdG1wIDwtIHRlbXBkaXIoKQogICAgemlwOjp1bnppcCh6aXBmaWxlID0gcGF0aCwgZXhkaXIgPSB0bXApCiAgICB0ZXJyYTo6cmFzdChmaWxlLnBhdGgodG1wLCBiYXNlbmFtZShwYXRoKSkpCn0&write=ewogICAgdG1wIDwtIHdpdGhyOjpsb2NhbF90ZW1wZGlyKCkKICAgIHJhc3Rlcl90bXBfZmlsZSA8LSBmaWxlLnBhdGgodG1wLCBiYXNlbmFtZShwYXRoKSkKICAgIHppcF90bXBfZmlsZSA8LSBmaWxlLnBhdGgodG1wLCAib2JqZWN0LnppcCIpCiAgICBkby5jYWxsKHRlcnJhOjp3cml0ZVJhc3RlciwgYyhsaXN0KHggPSBvYmplY3QsIGZpbGVuYW1lID0gcmFzdGVyX3RtcF9maWxlLCAKICAgICAgICBmaWxldHlwZSA9ICJHVGlmZiIsIG92ZXJ3cml0ZSA9IFRSVUUsIGdkYWwgPSBjKCJDT01QUkVTUz1ERUZMQVRFIiwgCiAgICAgICAgIlpMRVZFTD05IikpLCBsaXN0KCkpKQogICAgcmFzdGVyX2ZpbGVzIDwtIGxpc3QuZmlsZXMocGF0aCA9IHRtcCwgZnVsbC5uYW1lcyA9IFRSVUUpCiAgICB6aXA6OnppcCh6aXBmaWxlID0gemlwX3RtcF9maWxlLCBmaWxlcyA9IHJhc3Rlcl9maWxlcywgY29tcHJlc3Npb25fbGV2ZWwgPSAxLCAKICAgICAgICBtb2RlID0gImNoZXJyeS1waWNrIiwgcm9vdCA9IHRtcCkKICAgIGZpbGUuY29weSh6aXBfdG1wX2ZpbGUsIHBhdGgpCn0&marshal=dGVycmE6OndyYXAob2JqZWN0KQ&unmarshal=dGVycmE6OnVud3JhcChvYmplY3Qp&convert=©=&repository=|local|list|||222.265|attribute variables are assumed to be spatially constant throughout all geometries. PROJ: proj_create_from_name: Cannot find proj.db (GDAL error 1). PROJ: proj_create_from_name: Cannot find proj.db (GDAL error 1). PROJ: proj_create_from_name: Cannot find proj.db (GDAL error 1)|[==] raster has no values
+domain.gpkg|stem|3752155dbbfebdfc|d071234244cc8a00|c3152e2a22ed6a1e|105859277||t20462.8197902732s|s3072000b|3072000|format_custom&read=ewogICAgaWYgKCJHUEtHIiA9PSAiRVNSSSBTaGFwZWZpbGUiKSB7CiAgICAgICAgdGVycmE6OnZlY3QocGFzdGUwKCIvdnNpemlwL3siLCBwYXRoLCAifSIpKQogICAgfQogICAgZWxzZSB7CiAgICAgICAgdGVycmE6OnZlY3QocGF0aCkKICAgIH0KfQ&write=ewogICAgZG8uY2FsbCh0ZXJyYTo6d3JpdGVWZWN0b3IsIGMobGlzdCh4ID0gb2JqZWN0LCBmaWxlbmFtZSA9IGlmZWxzZSgiR1BLRyIgPT0gCiAgICAgICAgIkVTUkkgU2hhcGVmaWxlIiwgeWVzID0gcGFzdGUwKHBhdGgsICIuc2h6IiksIG5vID0gcGF0aCksIAogICAgICAgIGZpbGV0eXBlID0gIkdQS0ciLCBvdmVyd3JpdGUgPSBUUlVFLCBvcHRpb25zID0gIkVOQ09ESU5HPVVURi04IiksIAogICAgICAgIGxpc3QoKSkpCiAgICBpZiAoIkdQS0ciID09ICJFU1JJIFNoYXBlZmlsZSIpIHsKICAgICAgICBmaWxlLnJlbmFtZShwYXN0ZTAocGF0aCwgIi5zaHoiKSwgcGF0aCkKICAgIH0KfQ&marshal=dGVycmE6OndyYXAob2JqZWN0KQ&unmarshal=dGVycmE6OnVud3JhcChvYmplY3Qp&convert=©=&repository=|local|list|||17.522||
+get_release_elevation_nasadem|function|0404b4ce37dd6a41|||||||||||||||
+country.gpkg|stem|2582513b02199b9d|81ddbcfc163d4096|40e5cb748104ac36|728599321|data/raw/country.gpkg|t20465.7424674251s|s4964352b|4964352|file|local|vector|||13.63||
+domain_bbox|stem|09b657536e3c59a9|91710e24cd731172|832da33b4d2d7b12|1880263597||t20465.7494766091s|s1960b|1960|rds|local|vector|||0.023||
+vegmap_shp|stem|9cade294bcf5aff4|66bbc84b2758a527|00bcda0fe14dd1f7|-979952299|data/manual_download/NVM2024/shapefile/NVM2024Final_IEM5_12_07012025.shp|t20465.9081331559s|s499322168b|499322168|file|local|vector|||0.043||
+domain_nc|stem|96dc0114379d9051|b8acd697cd8f2d9d|44a1851f1c7c45da|191087344|data/raw/domain.nc|t20466.8819384602s|s8239559b|8239559|file|local|vector|||314.971|attribute variables are assumed to be spatially constant throughout all geometries. NAs introduced by coercion to integer range. NAs introduced by coercion to integer range|
+vegmap_nc|stem|64e699364294e6c9|b5acbb48248b9d4e|498003e3b29b0906|573083685|data/raw/vegmap.nc|t20466.8844654185s|s1262002b|1262002|file|local|vector|||218.292|attribute variables are assumed to be spatially constant throughout all geometries|
+get_release_elevation_nasadem_appears|function|2aa9c12e93873a06|||||||||||||||
+elevation_nasadem_release|stem||844ad2839f008475|2c530c1562a7fbd1|-1675952279||t20466.886570181s||0|rds|local|vector|||0.049||could not find function 'get_release_elevation_nasadem'
+elevation|stem||5fbbedebd1d63e4c|407f9094edd58a6c|223776802||t20466.8883945611s||0|file|local|vector|||2975.358||Task polling timed out after 600 seconds
+.tar_release_upload_with_retry|function|fec3488334573a3c|||||||||||||||
+rel_store|object|e6e2823525d141fc|||||||||||||||
+rel_resources|object|5ee4b402b43d8c80|||||||||||||||
+.tar_release_validate_file|function|e3d4de13c3c072ff|||||||||||||||
+tar_release_resources|function|53ebe2d610ecbda8|||||||||||||||
+.tar_release_download_with_retry|function|4330c4f0ead9e90e|||||||||||||||
+tar_release_storage|function|ec8c17bd82f64ec2|||||||||||||||
+domain.parquet|stem|c46b7f544a0c0629|7f3fdd56ef8d2af4|8fe712f7a50fc85a|522092063|data/raw/domain.parquet|t20467.8492217853s|s2564266b|2564266|file|local|vector|||22.597|This is an initial implementation of Parquet/Feather file support and geo metadata. This is tracking version 0.1.0 of the metadata (https://github.com/geopandas/geo-arrow-spec). This metadata specification may change and does not yet make stability promises. We do not yet recommend using this in a production setting unless you are able to rewrite your Parquet/Feather files.|
+.tar_github_release_exists|function|ca7fe334b03daa9f|||||||||||||||
+.tar_github_release_upload|function|5737138f4a437610|||||||||||||||
+.tar_github_release_download|function|fb6fac5d9f78a572|||||||||||||||
+country.parquet|stem|2f020da9d9337cd7|81ddbcfc163d4096|e104ab210d1047f3|1129261391|data/target_outputs/country.parquet|t20467.8667292114s|s4488713b|4488713|file|local|vector|||12.091|This is an initial implementation of Parquet/Feather file support and geo metadata. This is tracking version 0.1.0 of the metadata (https://github.com/geopandas/geo-arrow-spec). This metadata specification may change and does not yet make stability promises. We do not yet recommend using this in a production setting unless you are able to rewrite your Parquet/Feather files.|
+run_mode|object|2a9122a6b200ac1c
+domain_map|function|9b57e91e94d73101
+rstoken|object|36a62e4262736b46
+robust_pb_download_solo|function|d148e32c5f7beb8f
+fit_model|function|8f8e281853bbef05
+process_dynamic_data_to_parquet|function|49f8abfce5758803
+clean_data|function|860451632161bcc2
+gh_repo_config|object|148485602b17d22f
+domain_rasterize|function|ec9f6819b53a9141
+robust_download_file|function|2ea70b1df9a469fc
+verbose|object|988c41ba10911dc8
+kr_pwd|object|b61b0b830c8b3de2
+get_release_precipitation_chelsa|function|e5a54d4f8a475a6c
+summarize_posteriors|function|848f748de452ef0d
+robust_pb_upload|function|bf296132f5183235
+github_actions_env|object|2c530c1562a7fbd1
+.Random.seed|object|bb899618badafb4e
+tag|object|64ff18d09ad298f3
+earthdata_user|object|a72c4475a256a3c1
+sys_info|object|ada53e2071fe586e
+max_layers|object|08d5f59e833de599
+get_country|function|bf54208b5dd9f5ca
+existing_kr|object|1bb3bf184f7669e1
+get_alos_data|function|75cf21dd60609648
+tar_github_release_resources|function|5005c1e1d1f13042
+download_vegmap_release|function|0273ecf8e3505b66
+process_fix_modis_projection|function|08e12464ac799094
+group_data_function|function|3e4778f64d247976
+data_vegmap|function|3aea21ddb80cc68d
+get_elevation|function|44cce564be9070e7
+get_release_soil_gcfr|function|a0922c0000fe3eac
+get_release_ndvi_viirs_appeears|function|e0bb04ad860b66e9
+release_data|function|2c9988c7000cc9cb
+spatial_outputs|function|d4fac95c20424f91
+stan_data_function|function|7bb856cb63dafc1b
+process_stable_data|function|7b7dbd9205f1e1aa
+robust_max|function|6d27abe569a34028
+get_release_landcover_za|function|9ece1e5f946d7a70
+get_vegmap|function|8590caba91b9be39
+get_release_fire_modis_appeears|function|9992a7da9cc6cf78
+domain_define|function|6e7942fc59c20a13
+kr_name|object|643fa3c4a8310651
+temp_directory|object|40d122f36d50a344
+gh_repo|object|dbe88c1b061b73dc
+earthdata_pass|object|b61b0b830c8b3de2
+sleep_time|object|9f0cda529028d8d9
+update_git|function|8d72fa6c21b94951
+get_model_data|function|dc3148c05e8961ed
+get_release_ndvi_evi_modis_appeears|function|e25766b94a258005
+make_domain_bbox|function|80239b842e709a51
+tar_github_release_repo|function|f264edf951256e9b
+robust_min|function|21d2e9972a741573
+robust_pb_download|function|4df763e84d88eae4
+get_release_clouds_wilson|function|76923df0f19c017f
+get_chelsa|function|f63060c4751e6183
+get_release_climate_chelsa|function|f63060c4751e6183
+get_release_alos|function|3d0bd84374208048
+process_release_precipitation_chelsa|function|d0ff995578684615
+process_fix_modis_NDVI_release_extent|function|78480d840c75d726
+process_release_stable_data|function|d7e21566c1505209
+process_release_landcover_za|function|df1122d1616ce553
+process_release_ndvi_relative_days_since_fire|function|1618a29d1bc7ce97
+process_release_elevation_nasadem|function|73c3236559d7c4cc
+process_release_alos|function|d1225f8b3a3fa4da
+process_release_soil_gcfr|function|51a95877cbbd87c2
+process_release_protected_area_distance|function|4ded7cf04ce267a2
+process_release_climate_chelsa|function|bbaf017bff9aa203
+process_release_fire_doy_to_unix_date|function|4ed8b31bf3143599
+process_release_dynamic_data_to_parquet|function|ebe5748129d83a52
+process_fix_modis_release_extent|function|a7fcb6002d0c81b0
+process_fix_modis_release_projection_and_extent|function|0b5c9acab6c0fda2
+process_release_clouds_wilson|function|82bb664b6826489b
+process_release_burn_date_to_last_burned_date|function|72c41eb8a175408f
+process_fix_modis_release_projection|function|d5471fb33885fc04
+get_release_template_raster|function|67f3e5666754d69d
+domain_bbox.parquet|stem|e5b3381be6d92804|8ef5b89424c2d345|3b603d46958c9c45|1651755667|data/target_outputs/domain_bbox.parquet|t20468.1054726828s|s15057b|11877|file|repository_cas&upload=ewogICAgcmVwbyA8LSBTeXMuZ2V0ZW52KCJUQVJfR0hfUkVMRUFTRV9SRVBPIikKICAgIHRhZyA8LSBTeXMuZ2V0ZW52KCJUQVJfR0hfUkVMRUFTRV9UQUciKQogICAgZm9ybWF0IDwtIFN5cy5nZXRlbnYoIlRBUl9HSF9SRUxFQVNFX0ZPUk1BVCIpCiAgICByZWxlYXNlX2V4aXN0cyA8LSBGQUxTRQogICAgdHJ5Q2F0Y2goewogICAgICAgIGFzc2V0cyA8LSBwaWdneWJhY2s6OnBiX2xpc3QocmVwbyA9IHJlcG8sIHRhZyA9IHRhZykKICAgICAgICByZWxlYXNlX2V4aXN0cyA8LSBUUlVFCiAgICB9LCBlcnJvciA9IGZ1bmN0aW9uKGUpIHsKICAgICAgICByZWxlYXNlX2V4aXN0cyA8PC0gRkFMU0UKICAgIH0pCiAgICBpZiAoIXJlbGVhc2VfZXhpc3RzKSB7CiAgICAgICAgbWVzc2FnZSgiW3Rhcl9naXRodWJfcmVsZWFzZV0gQ3JlYXRpbmcgcmVsZWFzZTogIiwgdGFnKQogICAgICAgIHRyeUNhdGNoKHsKICAgICAgICAgICAgcGlnZ3liYWNrOjpwYl9uZXdfcmVsZWFzZShyZXBvID0gcmVwbywgdGFnID0gdGFnKQogICAgICAgICAgICBtZXNzYWdlKCJbdGFyX2dpdGh1Yl9yZWxlYXNlXSBSZWxlYXNlIGNyZWF0ZWQ6ICIsIAogICAgICAgICAgICAgICAgdGFnKQogICAgICAgIH0sIGVycm9yID0gZnVuY3Rpb24oZSkgewogICAgICAgICAgICBpZiAoIWdyZXBsKCJhbHJlYWR5IGV4aXN0cyIsIHRvbG93ZXIoY29uZGl0aW9uTWVzc2FnZShlKSkpKSB7CiAgICAgICAgICAgICAgICBzdG9wKCJbdGFyX2dpdGh1Yl9yZWxlYXNlXSBGYWlsZWQgdG8gY3JlYXRlIHJlbGVhc2U6ICIsIAogICAgICAgICAgICAgICAgICBjb25kaXRpb25NZXNzYWdlKGUpKQogICAgICAgICAgICB9CiAgICAgICAgfSkKICAgIH0KICAgIGlmIChmaWxlLmV4aXN0cyhwYXRoKSAmJiAhZGlyLmV4aXN0cyhwYXRoKSkgewogICAgICAgIG1lc3NhZ2UoIlt0YXJfZ2l0aHViX3JlbGVhc2VdIFVwbG9hZGluZyBmaWxlOiAiLCBrZXkpCiAgICAgICAgY3JlZHMgPC0gdHJ5Q2F0Y2goewogICAgICAgICAgICBnaXRjcmVkczo6Z2l0Y3JlZHNfZ2V0KCkKICAgICAgICB9LCBlcnJvciA9IGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgbWVzc2FnZSgiW3Rhcl9naXRodWJfcmVsZWFzZV0gTm8gZ2l0IGNyZWRlbnRpYWxzIGZvdW5kLCB0cnlpbmcgd2l0aG91dCB0b2tlbiIpCiAgICAgICAgICAgIE5VTEwKICAgICAgICB9KQogICAgICAgIHRva2VuIDwtIGlmICghaXMubnVsbChjcmVkcykpIAogICAgICAgICAgICBjcmVkcyRwYXNzd29yZAogICAgICAgIGVsc2UgTlVMTAogICAgICAgIG1heF9hdHRlbXB0cyA8LSAzCiAgICAgICAgdXBsb2FkZWQgPC0gRkFMU0UKICAgICAgICBmb3IgKGF0dGVtcHQgaW4gMTptYXhfYXR0ZW1wdHMpIHsKICAgICAgICAgICAgdHJ5Q2F0Y2goewogICAgICAgICAgICAgICAgcGlnZ3liYWNrOjpwYl91cGxvYWQoZmlsZSA9IHBhdGgsIHJlcG8gPSByZXBvLCAKICAgICAgICAgICAgICAgICAgdGFnID0gdGFnLCBuYW1lID0ga2V5LCBvdmVyd3JpdGUgPSBUUlVFLCAudG9rZW4gPSB0b2tlbikKICAgICAgICAgICAgICAgIG1lc3NhZ2UoIlt0YXJfZ2l0aHViX3JlbGVhc2VdIEZpbGUgdXBsb2FkZWQgc3VjY2Vzc2Z1bGx5OiAiLCAKICAgICAgICAgICAgICAgICAga2V5KQogICAgICAgICAgICAgICAgU3lzLnNsZWVwKDEpCiAgICAgICAgICAgICAgICB1cGxvYWRlZCA8LSBUUlVFCiAgICAgICAgICAgICAgICByZXR1cm4oaW52aXNpYmxlKCkpCiAgICAgICAgICAgIH0sIGVycm9yID0gZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgICAgbWVzc2FnZSgiW3Rhcl9naXRodWJfcmVsZWFzZV0gVXBsb2FkIGF0dGVtcHQgIiwgCiAgICAgICAgICAgICAgICAgIGF0dGVtcHQsICIgZmFpbGVkOiAiLCBjb25kaXRpb25NZXNzYWdlKGUpKQogICAgICAgICAgICAgICAgaWYgKGF0dGVtcHQgPCBtYXhfYXR0ZW1wdHMpIHsKICAgICAgICAgICAgICAgICAgU3lzLnNsZWVwKDIpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgc3RvcCgiW3Rhcl9naXRodWJfcmVsZWFzZV0gRmFpbGVkIHRvIHVwbG9hZCBmaWxlIGFmdGVyICIsIAogICAgICAgICAgICAgICAgICAgIG1heF9hdHRlbXB0cywgIiBhdHRlbXB0czogIiwgY29uZGl0aW9uTWVzc2FnZShlKSkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSkKICAgICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvYmogPC0gcmVhZFJEUyhwYXRoKQogICAgICAgIHRlbXBfZmlsZSA8LSB0ZW1wZmlsZShmaWxlZXh0ID0gcGFzdGUwKCIuIiwgZm9ybWF0KSkKICAgICAgICBvbi5leGl0KHVubGluayh0ZW1wX2ZpbGUpLCBhZGQgPSBUUlVFKQogICAgICAgIGlmIChmb3JtYXQgPT0gInFzIikgewogICAgICAgICAgICBxczo6cXNhdmUob2JqLCB0ZW1wX2ZpbGUpCiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGZvcm1hdCA9PSAicmRzIikgewogICAgICAgICAgICBzYXZlUkRTKG9iaiwgdGVtcF9maWxlKQogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT0gInBhcnF1ZXQiKSB7CiAgICAgICAgICAgIGFycm93Ojp3cml0ZV9wYXJxdWV0KG9iaiwgdGVtcF9maWxlKQogICAgICAgIH0KICAgICAgICBtYXhfYXR0ZW1wdHMgPC0gNQogICAgICAgIGZvciAoYXR0ZW1wdCBpbiAxOm1heF9hdHRlbXB0cykgewogICAgICAgICAgICB0cnlDYXRjaCh7CiAgICAgICAgICAgICAgICBwaWdneWJhY2s6OnBiX3VwbG9hZChmaWxlID0gdGVtcF9maWxlLCByZXBvID0gcmVwbywgCiAgICAgICAgICAgICAgICAgIHRhZyA9IHRhZywgbmFtZSA9IGtleSwgb3ZlcndyaXRlID0gVFJVRSwgLnRva2VuID0gTlVMTCkKICAgICAgICAgICAgICAgIG1lc3NhZ2UoIlt0YXJfZ2l0aHViX3JlbGVhc2VdIE9iamVjdCB1cGxvYWRlZDogIiwgCiAgICAgICAgICAgICAgICAgIGtleSkKICAgICAgICAgICAgICAgIHJldHVybihpbnZpc2libGUoKSkKICAgICAgICAgICAgfSwgZXJyb3IgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICBpZiAoYXR0ZW1wdCA8IG1heF9hdHRlbXB0cykgewogICAgICAgICAgICAgICAgICBtZXNzYWdlKCJbdGFyX2dpdGh1Yl9yZWxlYXNlXSBVcGxvYWQgYXR0ZW1wdCAiLCAKICAgICAgICAgICAgICAgICAgICBhdHRlbXB0LCAiIGZhaWxlZDogIiwgY29uZGl0aW9uTWVzc2FnZShlKSkKICAgICAgICAgICAgICAgICAgU3lzLnNsZWVwKDIpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgc3RvcCgiW3Rhcl9naXRodWJfcmVsZWFzZV0gRmFpbGVkIHRvIHVwbG9hZCBhZnRlciAiLCAKICAgICAgICAgICAgICAgICAgICBtYXhfYXR0ZW1wdHMsICIgYXR0ZW1wdHM6ICIsIGNvbmRpdGlvbk1lc3NhZ2UoZSkpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pCiAgICAgICAgfQogICAgfQp9&download=ewogICAgcmVwbyA8LSBTeXMuZ2V0ZW52KCJUQVJfR0hfUkVMRUFTRV9SRVBPIikKICAgIHRhZyA8LSBTeXMuZ2V0ZW52KCJUQVJfR0hfUkVMRUFTRV9UQUciKQogICAgZm9ybWF0IDwtIFN5cy5nZXRlbnYoIlRBUl9HSF9SRUxFQVNFX0ZPUk1BVCIpCiAgICBjYWNoZV9kaXIgPC0gU3lzLmdldGVudigiVEFSX0dIX1JFTEVBU0VfQ0FDSEVfRElSIikKICAgIGRpci5jcmVhdGUoY2FjaGVfZGlyLCByZWN1cnNpdmUgPSBUUlVFLCBzaG93V2FybmluZ3MgPSBGQUxTRSkKICAgIGNhY2hlZF9maWxlIDwtIGZpbGUucGF0aChjYWNoZV9kaXIsIGtleSkKICAgIG5lZWRfZG93bmxvYWQgPC0gVFJVRQogICAgaWYgKGZpbGUuZXhpc3RzKGNhY2hlZF9maWxlKSkgewogICAgICAgIHRyeUNhdGNoKHsKICAgICAgICAgICAgcmVtb3RlX2Fzc2V0cyA8LSBwaWdneWJhY2s6OnBiX2xpc3QocmVwbyA9IHJlcG8sIAogICAgICAgICAgICAgICAgdGFnID0gdGFnKQogICAgICAgICAgICByZW1vdGVfYXNzZXQgPC0gcmVtb3RlX2Fzc2V0c1tyZW1vdGVfYXNzZXRzJGZpbGVfbmFtZSA9PSAKICAgICAgICAgICAgICAgIGtleSwgXQogICAgICAgICAgICBpZiAobnJvdyhyZW1vdGVfYXNzZXQpID4gMCkgewogICAgICAgICAgICAgICAgbG9jYWxfc2l6ZSA8LSBmaWxlLnNpemUoY2FjaGVkX2ZpbGUpCiAgICAgICAgICAgICAgICByZW1vdGVfc2l6ZSA8LSByZW1vdGVfYXNzZXQkc2l6ZVsxXQogICAgICAgICAgICAgICAgaWYgKGxvY2FsX3NpemUgPT0gcmVtb3RlX3NpemUpIHsKICAgICAgICAgICAgICAgICAgbWVzc2FnZSgiW3Rhcl9naXRodWJfcmVsZWFzZV0gQ2FjaGUgdmFsaWQgKHNpemUgbWF0Y2g6ICIsIAogICAgICAgICAgICAgICAgICAgIGxvY2FsX3NpemUsICIgYnl0ZXMpIikKICAgICAgICAgICAgICAgICAgbmVlZF9kb3dubG9hZCA8LSBGQUxTRQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwgZXJyb3IgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIG1lc3NhZ2UoIlt0YXJfZ2l0aHViX3JlbGVhc2VdIENvdWxkIG5vdCB2ZXJpZnkgY2FjaGU6ICIsIAogICAgICAgICAgICAgICAgY29uZGl0aW9uTWVzc2FnZShlKSkKICAgICAgICB9KQogICAgfQogICAgaWYgKG5lZWRfZG93bmxvYWQpIHsKICAgICAgICBtYXhfYXR0ZW1wdHMgPC0gNQogICAgICAgIGZvciAoYXR0ZW1wdCBpbiAxOm1heF9hdHRlbXB0cykgewogICAgICAgICAgICB0cnlDYXRjaCh7CiAgICAgICAgICAgICAgICBwaWdneWJhY2s6OnBiX2Rvd25sb2FkKGZpbGUgPSBrZXksIHJlcG8gPSByZXBvLCAKICAgICAgICAgICAgICAgICAgdGFnID0gdGFnLCBkZXN0ID0gY2FjaGVfZGlyLCBvdmVyd3JpdGUgPSBUUlVFKQogICAgICAgICAgICAgICAgbWVzc2FnZSgiW3Rhcl9naXRodWJfcmVsZWFzZV0gRG93bmxvYWRlZDogIiwgCiAgICAgICAgICAgICAgICAgIGtleSkKICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgIH0sIGVycm9yID0gZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgICAgaWYgKGF0dGVtcHQgPCBtYXhfYXR0ZW1wdHMpIHsKICAgICAgICAgICAgICAgICAgbWVzc2FnZSgiW3Rhcl9naXRodWJfcmVsZWFzZV0gRG93bmxvYWQgYXR0ZW1wdCAiLCAKICAgICAgICAgICAgICAgICAgICBhdHRlbXB0LCAiIGZhaWxlZDogIiwgY29uZGl0aW9uTWVzc2FnZShlKSkKICAgICAgICAgICAgICAgICAgU3lzLnNsZWVwKDIpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgc3RvcCgiW3Rhcl9naXRodWJfcmVsZWFzZV0gRmFpbGVkIHRvIGRvd25sb2FkIGFmdGVyICIsIAogICAgICAgICAgICAgICAgICAgIG1heF9hdHRlbXB0cywgIiBhdHRlbXB0czogIiwgY29uZGl0aW9uTWVzc2FnZShlKSkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSkKICAgICAgICB9CiAgICB9CiAgICBpZiAoIWZpbGUuZXhpc3RzKGNhY2hlZF9maWxlKSkgewogICAgICAgIHN0b3AoIlt0YXJfZ2l0aHViX3JlbGVhc2VdIEZhaWxlZCB0byByZXRyaWV2ZTogIiwga2V5KQogICAgfQogICAgZmlsZV9leHRzIDwtIGMoInBhcnF1ZXQiLCAibmMiLCAidGlmIiwgImdwa2ciLCAic2hwIiwgImRiZiIsIAogICAgICAgICJwcmoiLCAic2h4IikKICAgIGlzX3NwYXRpYWxfZmlsZSA8LSBhbnkoZW5kc1dpdGgodG9sb3dlcihrZXkpLCBwYXN0ZTAoIi4iLCAKICAgICAgICBmaWxlX2V4dHMpKSkKICAgIGlmIChpc19zcGF0aWFsX2ZpbGUpIHsKICAgICAgICBmaWxlLmNvcHkoY2FjaGVkX2ZpbGUsIHBhdGgsIG92ZXJ3cml0ZSA9IFRSVUUpCiAgICAgICAgbWVzc2FnZSgiW3Rhcl9naXRodWJfcmVsZWFzZV0gUmV0cmlldmVkIGZpbGU6ICIsIGtleSkKICAgIH0KICAgIGVsc2UgewogICAgICAgIGlmIChmb3JtYXQgPT0gInFzIikgewogICAgICAgICAgICBvYmogPC0gcXM6OnFyZWFkKGNhY2hlZF9maWxlKQogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT0gInJkcyIpIHsKICAgICAgICAgICAgb2JqIDwtIHJlYWRSRFMoY2FjaGVkX2ZpbGUpCiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGZvcm1hdCA9PSAicGFycXVldCIpIHsKICAgICAgICAgICAgb2JqIDwtIGFycm93OjpyZWFkX3BhcnF1ZXQoY2FjaGVkX2ZpbGUpCiAgICAgICAgfQogICAgICAgIHNhdmVSRFMob2JqLCBwYXRoKQogICAgICAgIG1lc3NhZ2UoIlt0YXJfZ2l0aHViX3JlbGVhc2VdIFJldHJpZXZlZCBhbmQgZGVzZXJpYWxpemVkOiAiLCAKICAgICAgICAgICAga2V5KQogICAgfQogICAgaW52aXNpYmxlKCkKfQ&exists=ewogICAgcmVwbyA8LSBTeXMuZ2V0ZW52KCJUQVJfR0hfUkVMRUFTRV9SRVBPIikKICAgIHRhZyA8LSBTeXMuZ2V0ZW52KCJUQVJfR0hfUkVMRUFTRV9UQUciKQogICAgZm9yIChhdHRlbXB0IGluIDE6MykgewogICAgICAgIHRyeUNhdGNoKHsKICAgICAgICAgICAgYXNzZXRzIDwtIHBpZ2d5YmFjazo6cGJfbGlzdChyZXBvID0gcmVwbywgdGFnID0gdGFnKQogICAgICAgICAgICBmb3VuZCA8LSBhbnkoYXNzZXRzJGZpbGVfbmFtZSA9PSBrZXkpCiAgICAgICAgICAgIGlmIChmb3VuZCkgCiAgICAgICAgICAgICAgICByZXR1cm4oVFJVRSkKICAgICAgICAgICAgaWYgKGF0dGVtcHQgPCAzKSAKICAgICAgICAgICAgICAgIFN5cy5zbGVlcCgxKQogICAgICAgIH0sIGVycm9yID0gZnVuY3Rpb24oZSkgewogICAgICAgICAgICBpZiAoYXR0ZW1wdCA8IDMpIAogICAgICAgICAgICAgICAgU3lzLnNsZWVwKDEpCiAgICAgICAgfSkKICAgIH0KICAgIEZBTFNFCn0&list=&consistent=RkFMU0U|vector|||||Error hashing output: timed out after retrying for 82.862 seconds. Path data/target_outputs/domain_bbox.parquet does not exist or has incorrect hash. File sync timed out.
+run_mode|object|2a9122a6b200ac1c
+domain_map|function|9b57e91e94d73101
+rstoken|object|36a62e4262736b46
+robust_pb_download_solo|function|d148e32c5f7beb8f
+fit_model|function|8f8e281853bbef05
+process_dynamic_data_to_parquet|function|49f8abfce5758803
+clean_data|function|860451632161bcc2
+gh_repo_config|object|148485602b17d22f
+domain_rasterize|function|ec9f6819b53a9141
+robust_download_file|function|2ea70b1df9a469fc
+verbose|object|988c41ba10911dc8
+kr_pwd|object|b61b0b830c8b3de2
+get_release_precipitation_chelsa|function|e5a54d4f8a475a6c
+summarize_posteriors|function|848f748de452ef0d
+robust_pb_upload|function|bf296132f5183235
+github_actions_env|object|2c530c1562a7fbd1
+.Random.seed|object|e70e27c0086d8559
+tag|object|64ff18d09ad298f3
+earthdata_user|object|a72c4475a256a3c1
+sys_info|object|ada53e2071fe586e
+max_layers|object|08d5f59e833de599
+get_country|function|bf54208b5dd9f5ca
+existing_kr|object|1bb3bf184f7669e1
+get_alos_data|function|75cf21dd60609648
+tar_github_release_resources|function|5005c1e1d1f13042
+download_vegmap_release|function|0273ecf8e3505b66
+process_fix_modis_projection|function|08e12464ac799094
+group_data_function|function|3e4778f64d247976
+data_vegmap|function|3aea21ddb80cc68d
+get_elevation|function|44cce564be9070e7
+get_release_soil_gcfr|function|a0922c0000fe3eac
+get_release_ndvi_viirs_appeears|function|e0bb04ad860b66e9
+release_data|function|2c9988c7000cc9cb
+spatial_outputs|function|d4fac95c20424f91
+stan_data_function|function|7bb856cb63dafc1b
+process_stable_data|function|7b7dbd9205f1e1aa
+robust_max|function|6d27abe569a34028
+get_release_landcover_za|function|9ece1e5f946d7a70
+get_vegmap|function|8590caba91b9be39
+get_release_fire_modis_appeears|function|9992a7da9cc6cf78
+domain_define|function|6e7942fc59c20a13
+kr_name|object|643fa3c4a8310651
+temp_directory|object|40d122f36d50a344
+gh_repo|object|dc84e030122d7d21
+earthdata_pass|object|b61b0b830c8b3de2
+sleep_time|object|9f0cda529028d8d9
+update_git|function|8d72fa6c21b94951
+get_model_data|function|dc3148c05e8961ed
+get_release_ndvi_evi_modis_appeears|function|e25766b94a258005
+make_domain_bbox|function|39ee8fcd6d65cd43
+tar_github_release_repo|function|d015c11962e2a87d
+robust_min|function|21d2e9972a741573
+robust_pb_download|function|4df763e84d88eae4
+get_release_clouds_wilson|function|76923df0f19c017f
+get_chelsa|function|f63060c4751e6183
+get_release_climate_chelsa|function|f63060c4751e6183
+get_release_alos|function|3d0bd84374208048
+process_release_precipitation_chelsa|function|d0ff995578684615
+process_fix_modis_NDVI_release_extent|function|78480d840c75d726
+process_release_stable_data|function|d7e21566c1505209
+process_release_landcover_za|function|df1122d1616ce553
+process_release_ndvi_relative_days_since_fire|function|1618a29d1bc7ce97
+process_release_elevation_nasadem|function|73c3236559d7c4cc
+process_release_alos|function|d1225f8b3a3fa4da
+process_release_soil_gcfr|function|51a95877cbbd87c2
+process_release_protected_area_distance|function|4ded7cf04ce267a2
+process_release_climate_chelsa|function|bbaf017bff9aa203
+process_release_fire_doy_to_unix_date|function|4ed8b31bf3143599
+process_release_dynamic_data_to_parquet|function|ebe5748129d83a52
+process_fix_modis_release_extent|function|a7fcb6002d0c81b0
+process_fix_modis_release_projection_and_extent|function|0b5c9acab6c0fda2
+process_release_clouds_wilson|function|82bb664b6826489b
+process_release_burn_date_to_last_burned_date|function|72c41eb8a175408f
+process_fix_modis_release_projection|function|d5471fb33885fc04
+get_release_template_raster|function|67f3e5666754d69d
+domain_bbox.parquet|stem|25cd0fd1894c1176|8ef5b89424c2d345|fb33e4abae37e8ee|1651755667|data/target_outputs/domain_bbox.parquet|t20468.1191109291s|s15057b|15057|file|repository_cas&upload=ewogICAgcmVwbyA8LSBTeXMuZ2V0ZW52KCJUQVJfR0hfUkVMRUFTRV9SRVBPIikKICAgIHRhZyA8LSBTeXMuZ2V0ZW52KCJUQVJfR0hfUkVMRUFTRV9UQUciKQogICAgZm9ybWF0IDwtIFN5cy5nZXRlbnYoIlRBUl9HSF9SRUxFQVNFX0ZPUk1BVCIpCiAgICByZWxlYXNlX2V4aXN0cyA8LSBGQUxTRQogICAgdHJ5Q2F0Y2goewogICAgICAgIGFzc2V0cyA8LSBwaWdneWJhY2s6OnBiX2xpc3QocmVwbyA9IHJlcG8sIHRhZyA9IHRhZykKICAgICAgICByZWxlYXNlX2V4aXN0cyA8LSBUUlVFCiAgICB9LCBlcnJvciA9IGZ1bmN0aW9uKGUpIHsKICAgICAgICByZWxlYXNlX2V4aXN0cyA8PC0gRkFMU0UKICAgIH0pCiAgICBpZiAoIXJlbGVhc2VfZXhpc3RzKSB7CiAgICAgICAgbWVzc2FnZSgiW3Rhcl9naXRodWJfcmVsZWFzZV0gQ3JlYXRpbmcgcmVsZWFzZTogIiwgdGFnKQogICAgICAgIHRyeUNhdGNoKHsKICAgICAgICAgICAgcGlnZ3liYWNrOjpwYl9uZXdfcmVsZWFzZShyZXBvID0gcmVwbywgdGFnID0gdGFnKQogICAgICAgICAgICBtZXNzYWdlKCJbdGFyX2dpdGh1Yl9yZWxlYXNlXSBSZWxlYXNlIGNyZWF0ZWQ6ICIsIAogICAgICAgICAgICAgICAgdGFnKQogICAgICAgIH0sIGVycm9yID0gZnVuY3Rpb24oZSkgewogICAgICAgICAgICBpZiAoIWdyZXBsKCJhbHJlYWR5IGV4aXN0cyIsIHRvbG93ZXIoY29uZGl0aW9uTWVzc2FnZShlKSkpKSB7CiAgICAgICAgICAgICAgICBzdG9wKCJbdGFyX2dpdGh1Yl9yZWxlYXNlXSBGYWlsZWQgdG8gY3JlYXRlIHJlbGVhc2U6ICIsIAogICAgICAgICAgICAgICAgICBjb25kaXRpb25NZXNzYWdlKGUpKQogICAgICAgICAgICB9CiAgICAgICAgfSkKICAgIH0KICAgIGlmIChmaWxlLmV4aXN0cyhwYXRoKSAmJiAhZGlyLmV4aXN0cyhwYXRoKSkgewogICAgICAgIG1lc3NhZ2UoIlt0YXJfZ2l0aHViX3JlbGVhc2VdIFVwbG9hZGluZyBmaWxlOiAiLCBrZXkpCiAgICAgICAgY3JlZHMgPC0gdHJ5Q2F0Y2goewogICAgICAgICAgICBnaXRjcmVkczo6Z2l0Y3JlZHNfZ2V0KCkKICAgICAgICB9LCBlcnJvciA9IGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgbWVzc2FnZSgiW3Rhcl9naXRodWJfcmVsZWFzZV0gTm8gZ2l0IGNyZWRlbnRpYWxzIGZvdW5kLCB0cnlpbmcgd2l0aG91dCB0b2tlbiIpCiAgICAgICAgICAgIE5VTEwKICAgICAgICB9KQogICAgICAgIHRva2VuIDwtIGlmICghaXMubnVsbChjcmVkcykpIAogICAgICAgICAgICBjcmVkcyRwYXNzd29yZAogICAgICAgIGVsc2UgTlVMTAogICAgICAgIG1heF9hdHRlbXB0cyA8LSAzCiAgICAgICAgdXBsb2FkZWQgPC0gRkFMU0UKICAgICAgICBmb3IgKGF0dGVtcHQgaW4gMTptYXhfYXR0ZW1wdHMpIHsKICAgICAgICAgICAgdHJ5Q2F0Y2goewogICAgICAgICAgICAgICAgcGlnZ3liYWNrOjpwYl91cGxvYWQoZmlsZSA9IHBhdGgsIHJlcG8gPSByZXBvLCAKICAgICAgICAgICAgICAgICAgdGFnID0gdGFnLCBuYW1lID0ga2V5LCBvdmVyd3JpdGUgPSBUUlVFLCAudG9rZW4gPSB0b2tlbikKICAgICAgICAgICAgICAgIG1lc3NhZ2UoIlt0YXJfZ2l0aHViX3JlbGVhc2VdIEZpbGUgdXBsb2FkZWQgc3VjY2Vzc2Z1bGx5OiAiLCAKICAgICAgICAgICAgICAgICAga2V5KQogICAgICAgICAgICAgICAgU3lzLnNsZWVwKDMpCiAgICAgICAgICAgICAgICB1cGxvYWRlZCA8LSBUUlVFCiAgICAgICAgICAgICAgICByZXR1cm4oaW52aXNpYmxlKCkpCiAgICAgICAgICAgIH0sIGVycm9yID0gZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgICAgbWVzc2FnZSgiW3Rhcl9naXRodWJfcmVsZWFzZV0gVXBsb2FkIGF0dGVtcHQgIiwgCiAgICAgICAgICAgICAgICAgIGF0dGVtcHQsICIgZmFpbGVkOiAiLCBjb25kaXRpb25NZXNzYWdlKGUpKQogICAgICAgICAgICAgICAgaWYgKGF0dGVtcHQgPCBtYXhfYXR0ZW1wdHMpIHsKICAgICAgICAgICAgICAgICAgU3lzLnNsZWVwKDIpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgc3RvcCgiW3Rhcl9naXRodWJfcmVsZWFzZV0gRmFpbGVkIHRvIHVwbG9hZCBmaWxlIGFmdGVyICIsIAogICAgICAgICAgICAgICAgICAgIG1heF9hdHRlbXB0cywgIiBhdHRlbXB0czogIiwgY29uZGl0aW9uTWVzc2FnZShlKSkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSkKICAgICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvYmogPC0gcmVhZFJEUyhwYXRoKQogICAgICAgIHRlbXBfZmlsZSA8LSB0ZW1wZmlsZShmaWxlZXh0ID0gcGFzdGUwKCIuIiwgZm9ybWF0KSkKICAgICAgICBvbi5leGl0KHVubGluayh0ZW1wX2ZpbGUpLCBhZGQgPSBUUlVFKQogICAgICAgIGlmIChmb3JtYXQgPT0gInFzIikgewogICAgICAgICAgICBxczo6cXNhdmUob2JqLCB0ZW1wX2ZpbGUpCiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGZvcm1hdCA9PSAicmRzIikgewogICAgICAgICAgICBzYXZlUkRTKG9iaiwgdGVtcF9maWxlKQogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT0gInBhcnF1ZXQiKSB7CiAgICAgICAgICAgIGFycm93Ojp3cml0ZV9wYXJxdWV0KG9iaiwgdGVtcF9maWxlKQogICAgICAgIH0KICAgICAgICBtYXhfYXR0ZW1wdHMgPC0gNQogICAgICAgIGZvciAoYXR0ZW1wdCBpbiAxOm1heF9hdHRlbXB0cykgewogICAgICAgICAgICB0cnlDYXRjaCh7CiAgICAgICAgICAgICAgICBwaWdneWJhY2s6OnBiX3VwbG9hZChmaWxlID0gdGVtcF9maWxlLCByZXBvID0gcmVwbywgCiAgICAgICAgICAgICAgICAgIHRhZyA9IHRhZywgbmFtZSA9IGtleSwgb3ZlcndyaXRlID0gVFJVRSwgLnRva2VuID0gTlVMTCkKICAgICAgICAgICAgICAgIG1lc3NhZ2UoIlt0YXJfZ2l0aHViX3JlbGVhc2VdIE9iamVjdCB1cGxvYWRlZDogIiwgCiAgICAgICAgICAgICAgICAgIGtleSkKICAgICAgICAgICAgICAgIHJldHVybihpbnZpc2libGUoKSkKICAgICAgICAgICAgfSwgZXJyb3IgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICBpZiAoYXR0ZW1wdCA8IG1heF9hdHRlbXB0cykgewogICAgICAgICAgICAgICAgICBtZXNzYWdlKCJbdGFyX2dpdGh1Yl9yZWxlYXNlXSBVcGxvYWQgYXR0ZW1wdCAiLCAKICAgICAgICAgICAgICAgICAgICBhdHRlbXB0LCAiIGZhaWxlZDogIiwgY29uZGl0aW9uTWVzc2FnZShlKSkKICAgICAgICAgICAgICAgICAgU3lzLnNsZWVwKDIpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgc3RvcCgiW3Rhcl9naXRodWJfcmVsZWFzZV0gRmFpbGVkIHRvIHVwbG9hZCBhZnRlciAiLCAKICAgICAgICAgICAgICAgICAgICBtYXhfYXR0ZW1wdHMsICIgYXR0ZW1wdHM6ICIsIGNvbmRpdGlvbk1lc3NhZ2UoZSkpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pCiAgICAgICAgfQogICAgfQp9&download=ewogICAgcmVwbyA8LSBTeXMuZ2V0ZW52KCJUQVJfR0hfUkVMRUFTRV9SRVBPIikKICAgIHRhZyA8LSBTeXMuZ2V0ZW52KCJUQVJfR0hfUkVMRUFTRV9UQUciKQogICAgZm9ybWF0IDwtIFN5cy5nZXRlbnYoIlRBUl9HSF9SRUxFQVNFX0ZPUk1BVCIpCiAgICBjYWNoZV9kaXIgPC0gU3lzLmdldGVudigiVEFSX0dIX1JFTEVBU0VfQ0FDSEVfRElSIikKICAgIGRpci5jcmVhdGUoY2FjaGVfZGlyLCByZWN1cnNpdmUgPSBUUlVFLCBzaG93V2FybmluZ3MgPSBGQUxTRSkKICAgIGNhY2hlZF9maWxlIDwtIGZpbGUucGF0aChjYWNoZV9kaXIsIGtleSkKICAgIG5lZWRfZG93bmxvYWQgPC0gVFJVRQogICAgaWYgKGZpbGUuZXhpc3RzKGNhY2hlZF9maWxlKSkgewogICAgICAgIHRyeUNhdGNoKHsKICAgICAgICAgICAgcmVtb3RlX2Fzc2V0cyA8LSBwaWdneWJhY2s6OnBiX2xpc3QocmVwbyA9IHJlcG8sIAogICAgICAgICAgICAgICAgdGFnID0gdGFnKQogICAgICAgICAgICByZW1vdGVfYXNzZXQgPC0gcmVtb3RlX2Fzc2V0c1tyZW1vdGVfYXNzZXRzJGZpbGVfbmFtZSA9PSAKICAgICAgICAgICAgICAgIGtleSwgXQogICAgICAgICAgICBpZiAobnJvdyhyZW1vdGVfYXNzZXQpID4gMCkgewogICAgICAgICAgICAgICAgbG9jYWxfc2l6ZSA8LSBmaWxlLnNpemUoY2FjaGVkX2ZpbGUpCiAgICAgICAgICAgICAgICByZW1vdGVfc2l6ZSA8LSByZW1vdGVfYXNzZXQkc2l6ZVsxXQogICAgICAgICAgICAgICAgaWYgKGxvY2FsX3NpemUgPT0gcmVtb3RlX3NpemUpIHsKICAgICAgICAgICAgICAgICAgbWVzc2FnZSgiW3Rhcl9naXRodWJfcmVsZWFzZV0gQ2FjaGUgdmFsaWQgKHNpemUgbWF0Y2g6ICIsIAogICAgICAgICAgICAgICAgICAgIGxvY2FsX3NpemUsICIgYnl0ZXMpIikKICAgICAgICAgICAgICAgICAgbmVlZF9kb3dubG9hZCA8LSBGQUxTRQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwgZXJyb3IgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIG1lc3NhZ2UoIlt0YXJfZ2l0aHViX3JlbGVhc2VdIENvdWxkIG5vdCB2ZXJpZnkgY2FjaGU6ICIsIAogICAgICAgICAgICAgICAgY29uZGl0aW9uTWVzc2FnZShlKSkKICAgICAgICB9KQogICAgfQogICAgaWYgKG5lZWRfZG93bmxvYWQpIHsKICAgICAgICBtYXhfYXR0ZW1wdHMgPC0gNQogICAgICAgIGZvciAoYXR0ZW1wdCBpbiAxOm1heF9hdHRlbXB0cykgewogICAgICAgICAgICB0cnlDYXRjaCh7CiAgICAgICAgICAgICAgICBwaWdneWJhY2s6OnBiX2Rvd25sb2FkKGZpbGUgPSBrZXksIHJlcG8gPSByZXBvLCAKICAgICAgICAgICAgICAgICAgdGFnID0gdGFnLCBkZXN0ID0gY2FjaGVfZGlyLCBvdmVyd3JpdGUgPSBUUlVFKQogICAgICAgICAgICAgICAgbWVzc2FnZSgiW3Rhcl9naXRodWJfcmVsZWFzZV0gRG93bmxvYWRlZDogIiwgCiAgICAgICAgICAgICAgICAgIGtleSkKICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgIH0sIGVycm9yID0gZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgICAgaWYgKGF0dGVtcHQgPCBtYXhfYXR0ZW1wdHMpIHsKICAgICAgICAgICAgICAgICAgbWVzc2FnZSgiW3Rhcl9naXRodWJfcmVsZWFzZV0gRG93bmxvYWQgYXR0ZW1wdCAiLCAKICAgICAgICAgICAgICAgICAgICBhdHRlbXB0LCAiIGZhaWxlZDogIiwgY29uZGl0aW9uTWVzc2FnZShlKSkKICAgICAgICAgICAgICAgICAgU3lzLnNsZWVwKDIpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgc3RvcCgiW3Rhcl9naXRodWJfcmVsZWFzZV0gRmFpbGVkIHRvIGRvd25sb2FkIGFmdGVyICIsIAogICAgICAgICAgICAgICAgICAgIG1heF9hdHRlbXB0cywgIiBhdHRlbXB0czogIiwgY29uZGl0aW9uTWVzc2FnZShlKSkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSkKICAgICAgICB9CiAgICB9CiAgICBpZiAoIWZpbGUuZXhpc3RzKGNhY2hlZF9maWxlKSkgewogICAgICAgIHN0b3AoIlt0YXJfZ2l0aHViX3JlbGVhc2VdIEZhaWxlZCB0byByZXRyaWV2ZTogIiwga2V5KQogICAgfQogICAgZmlsZV9leHRzIDwtIGMoInBhcnF1ZXQiLCAibmMiLCAidGlmIiwgImdwa2ciLCAic2hwIiwgImRiZiIsIAogICAgICAgICJwcmoiLCAic2h4IikKICAgIGlzX3NwYXRpYWxfZmlsZSA8LSBhbnkoZW5kc1dpdGgodG9sb3dlcihrZXkpLCBwYXN0ZTAoIi4iLCAKICAgICAgICBmaWxlX2V4dHMpKSkKICAgIGlmIChpc19zcGF0aWFsX2ZpbGUpIHsKICAgICAgICBmaWxlLmNvcHkoY2FjaGVkX2ZpbGUsIHBhdGgsIG92ZXJ3cml0ZSA9IFRSVUUpCiAgICAgICAgbWVzc2FnZSgiW3Rhcl9naXRodWJfcmVsZWFzZV0gUmV0cmlldmVkIGZpbGU6ICIsIGtleSkKICAgIH0KICAgIGVsc2UgewogICAgICAgIGlmIChmb3JtYXQgPT0gInFzIikgewogICAgICAgICAgICBvYmogPC0gcXM6OnFyZWFkKGNhY2hlZF9maWxlKQogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT0gInJkcyIpIHsKICAgICAgICAgICAgb2JqIDwtIHJlYWRSRFMoY2FjaGVkX2ZpbGUpCiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGZvcm1hdCA9PSAicGFycXVldCIpIHsKICAgICAgICAgICAgb2JqIDwtIGFycm93OjpyZWFkX3BhcnF1ZXQoY2FjaGVkX2ZpbGUpCiAgICAgICAgfQogICAgICAgIHNhdmVSRFMob2JqLCBwYXRoKQogICAgICAgIG1lc3NhZ2UoIlt0YXJfZ2l0aHViX3JlbGVhc2VdIFJldHJpZXZlZCBhbmQgZGVzZXJpYWxpemVkOiAiLCAKICAgICAgICAgICAga2V5KQogICAgfQogICAgaW52aXNpYmxlKCkKfQ&exists=ewogICAgcmVwbyA8LSBTeXMuZ2V0ZW52KCJUQVJfR0hfUkVMRUFTRV9SRVBPIikKICAgIHRhZyA8LSBTeXMuZ2V0ZW52KCJUQVJfR0hfUkVMRUFTRV9UQUciKQogICAgZm9yIChhdHRlbXB0IGluIDE6MTApIHsKICAgICAgICB0cnlDYXRjaCh7CiAgICAgICAgICAgIGFzc2V0cyA8LSBwaWdneWJhY2s6OnBiX2xpc3QocmVwbyA9IHJlcG8sIHRhZyA9IHRhZykKICAgICAgICAgICAgZm91bmQgPC0gYW55KGFzc2V0cyRmaWxlX25hbWUgPT0ga2V5KQogICAgICAgICAgICBpZiAoZm91bmQpIHsKICAgICAgICAgICAgICAgIG1lc3NhZ2UoIlt0YXJfZ2l0aHViX3JlbGVhc2VdIENvbmZpcm1lZCBleGlzdHM6ICIsIAogICAgICAgICAgICAgICAgICBrZXksICIgKGF0dGVtcHQgIiwgYXR0ZW1wdCwgIikiKQogICAgICAgICAgICAgICAgcmV0dXJuKFRSVUUpCiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGF0dGVtcHQgPCAxMCkgewogICAgICAgICAgICAgICAgU3lzLnNsZWVwKDIpCiAgICAgICAgICAgIH0KICAgICAgICB9LCBlcnJvciA9IGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgaWYgKGF0dGVtcHQgPCAxMCkgewogICAgICAgICAgICAgICAgU3lzLnNsZWVwKDIpCiAgICAgICAgICAgIH0KICAgICAgICB9KQogICAgfQogICAgRkFMU0UKfQ&list=&consistent=RkFMU0U|vector|||0.05|This is an initial implementation of Parquet/Feather file support and geo metadata. This is tracking version 0.1.0 of the metadata (https://github.com/geopandas/geo-arrow-spec). This metadata specification may change and does not yet make stability promises. We do not yet recommend using this in a production setting unless you are able to rewrite your Parquet/Feather files.|
diff --git a/ccr_startup.sh b/ccr_startup.sh
new file mode 100644
index 00000000..840233c0
--- /dev/null
+++ b/ccr_startup.sh
@@ -0,0 +1,28 @@
+#! /bin/bash
+
+# Connect to CCR and request an interactive job
+
+ssh vortex.ccr.buffalo.edu
+salloc --cluster=faculty --qos=adamw --partition=adamw \
+ --job-name=InteractiveJob --nodes=1 --ntasks=4 \
+ --mem=10G -C INTEL --time=24:00:00
+
+export GROUP="adamw"
+export PROJECT_FOLDER="/projects/academic/"$GROUP
+export APPTAINER_CACHEDIR="/vscratch/grp-adamw/"$USER"/singularity"
+export SIF_PATH=$PROJECT_FOLDER"/users/"$USER"/singularity"
+export SIF_FILE="AdamWilsonLab-emma_docker-latest.sif"
+
+
+apptainer run \
+ --bind $PROJECT_FOLDER:$PROJECT_FOLDER \
+ --bind $APPTAINER_CACHEDIR/tmp:/tmp \
+ --bind $APPTAINER_CACHEDIR/run:/run \
+ $SIF_PATH/$SIF_FILE R
+
+
+
+# Test github actions locally
+act -j targets \
+ --platform ubuntu-latest=adamwilsonlab/emma:latest \
+ --container-architecture linux/amd64
\ No newline at end of file
diff --git a/data/manual_download/All_Fires/All_Fires_20_21_gw.dbf b/data/manual_download/All_Fires/All_Fires_20_21_gw.dbf
deleted file mode 100644
index 712fa7ae..00000000
--- a/data/manual_download/All_Fires/All_Fires_20_21_gw.dbf
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:d6b6256fd8c9c3b9943579d919ac4d2605a4a7c5b66ec19e5c590d28017fb6df
-size 4455696
diff --git a/data/manual_download/All_Fires/All_Fires_20_21_gw.lyr b/data/manual_download/All_Fires/All_Fires_20_21_gw.lyr
deleted file mode 100644
index 91c7cbad..00000000
Binary files a/data/manual_download/All_Fires/All_Fires_20_21_gw.lyr and /dev/null differ
diff --git a/data/manual_download/All_Fires/All_Fires_20_21_gw.pdf b/data/manual_download/All_Fires/All_Fires_20_21_gw.pdf
deleted file mode 100644
index ecda38f4..00000000
Binary files a/data/manual_download/All_Fires/All_Fires_20_21_gw.pdf and /dev/null differ
diff --git a/data/manual_download/All_Fires/All_Fires_20_21_gw.prj b/data/manual_download/All_Fires/All_Fires_20_21_gw.prj
deleted file mode 100644
index a30c00a5..00000000
--- a/data/manual_download/All_Fires/All_Fires_20_21_gw.prj
+++ /dev/null
@@ -1 +0,0 @@
-GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]
\ No newline at end of file
diff --git a/data/manual_download/All_Fires/All_Fires_20_21_gw.qml b/data/manual_download/All_Fires/All_Fires_20_21_gw.qml
deleted file mode 100644
index a784974e..00000000
--- a/data/manual_download/All_Fires/All_Fires_20_21_gw.qml
+++ /dev/null
@@ -1,577 +0,0 @@
-
-
-
- 1
- 1
- 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 0
- 0
- 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 0
-
-
- 0
- generatedlayout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- RES_NAME
-
- 2
-
diff --git a/data/manual_download/All_Fires/All_Fires_20_21_gw.qpj b/data/manual_download/All_Fires/All_Fires_20_21_gw.qpj
deleted file mode 100644
index 5fbc831e..00000000
--- a/data/manual_download/All_Fires/All_Fires_20_21_gw.qpj
+++ /dev/null
@@ -1 +0,0 @@
-GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]
diff --git a/data/manual_download/All_Fires/All_Fires_20_21_gw.sbn b/data/manual_download/All_Fires/All_Fires_20_21_gw.sbn
deleted file mode 100644
index fb296b86..00000000
Binary files a/data/manual_download/All_Fires/All_Fires_20_21_gw.sbn and /dev/null differ
diff --git a/data/manual_download/All_Fires/All_Fires_20_21_gw.sbx b/data/manual_download/All_Fires/All_Fires_20_21_gw.sbx
deleted file mode 100644
index 15303df9..00000000
Binary files a/data/manual_download/All_Fires/All_Fires_20_21_gw.sbx and /dev/null differ
diff --git a/data/manual_download/All_Fires/All_Fires_20_21_gw.shp b/data/manual_download/All_Fires/All_Fires_20_21_gw.shp
deleted file mode 100644
index e729e422..00000000
--- a/data/manual_download/All_Fires/All_Fires_20_21_gw.shp
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:acafbdd28da2f5329a16bfa4bc69e7c77baad88f9cc43dbc1a925672e230b8e5
-size 14277344
diff --git a/data/manual_download/All_Fires/All_Fires_20_21_gw.shx b/data/manual_download/All_Fires/All_Fires_20_21_gw.shx
deleted file mode 100644
index 9d0c67a7..00000000
Binary files a/data/manual_download/All_Fires/All_Fires_20_21_gw.shx and /dev/null differ
diff --git a/data/manual_download/All_fires_23_24_gw/All_fires_23_24_gw.cpg b/data/manual_download/All_fires_23_24_gw/All_fires_23_24_gw.cpg
new file mode 100644
index 00000000..3ad133c0
--- /dev/null
+++ b/data/manual_download/All_fires_23_24_gw/All_fires_23_24_gw.cpg
@@ -0,0 +1 @@
+UTF-8
\ No newline at end of file
diff --git a/data/manual_download/All_fires_23_24_gw/All_fires_23_24_gw.dbf b/data/manual_download/All_fires_23_24_gw/All_fires_23_24_gw.dbf
new file mode 100644
index 00000000..4a2ce1e6
--- /dev/null
+++ b/data/manual_download/All_fires_23_24_gw/All_fires_23_24_gw.dbf
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7a0a89f91aea8c4c393f11a356ecbb87a7eb0b6c379a395fd4fdb8f9b11e343d
+size 3752962
diff --git a/data/manual_download/All_fires_23_24_gw/All_fires_23_24_gw.lyr b/data/manual_download/All_fires_23_24_gw/All_fires_23_24_gw.lyr
new file mode 100644
index 00000000..f4ba38cf
Binary files /dev/null and b/data/manual_download/All_fires_23_24_gw/All_fires_23_24_gw.lyr differ
diff --git a/data/manual_download/All_fires_23_24_gw/All_fires_23_24_gw.pdf b/data/manual_download/All_fires_23_24_gw/All_fires_23_24_gw.pdf
new file mode 100644
index 00000000..2024f82b
Binary files /dev/null and b/data/manual_download/All_fires_23_24_gw/All_fires_23_24_gw.pdf differ
diff --git a/data/manual_download/All_fires_23_24_gw/All_fires_23_24_gw.prj b/data/manual_download/All_fires_23_24_gw/All_fires_23_24_gw.prj
new file mode 100644
index 00000000..f45cbadf
--- /dev/null
+++ b/data/manual_download/All_fires_23_24_gw/All_fires_23_24_gw.prj
@@ -0,0 +1 @@
+GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]]
\ No newline at end of file
diff --git a/data/manual_download/All_fires_23_24_gw/All_fires_23_24_gw.qml b/data/manual_download/All_fires_23_24_gw/All_fires_23_24_gw.qml
new file mode 100644
index 00000000..8026a13c
--- /dev/null
+++ b/data/manual_download/All_fires_23_24_gw/All_fires_23_24_gw.qml
@@ -0,0 +1,972 @@
+
+
+
+ 1
+ 1
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+ 0
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+ 0
+ generatedlayout
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ "RES_NAME"
+
+ 2
+
diff --git a/data/manual_download/All_fires_23_24_gw/All_fires_23_24_gw.sbn b/data/manual_download/All_fires_23_24_gw/All_fires_23_24_gw.sbn
new file mode 100644
index 00000000..bc393860
Binary files /dev/null and b/data/manual_download/All_fires_23_24_gw/All_fires_23_24_gw.sbn differ
diff --git a/data/manual_download/All_fires_23_24_gw/All_fires_23_24_gw.sbx b/data/manual_download/All_fires_23_24_gw/All_fires_23_24_gw.sbx
new file mode 100644
index 00000000..c98d69a1
Binary files /dev/null and b/data/manual_download/All_fires_23_24_gw/All_fires_23_24_gw.sbx differ
diff --git a/data/manual_download/All_fires_23_24_gw/All_fires_23_24_gw.shp b/data/manual_download/All_fires_23_24_gw/All_fires_23_24_gw.shp
new file mode 100644
index 00000000..3c62efb3
--- /dev/null
+++ b/data/manual_download/All_fires_23_24_gw/All_fires_23_24_gw.shp
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3c9d77abce418d99fe169e64914d7779dc3d5db38c221a0396166ab46515c53c
+size 15173392
diff --git a/data/manual_download/All_fires_23_24_gw/All_fires_23_24_gw.shp.xml b/data/manual_download/All_fires_23_24_gw/All_fires_23_24_gw.shp.xml
new file mode 100644
index 00000000..02e803eb
--- /dev/null
+++ b/data/manual_download/All_fires_23_24_gw/All_fires_23_24_gw.shp.xml
@@ -0,0 +1,2 @@
+
+20240726134913001.0FALSECalculateField All_Fires_23_24_merge_fields1 AREA [Area_ha] VB #CalculateField All_Fires_23_24_merge_fields Area_ha [AREA] VB #CalculateField All_Fires_23_24_merge_fields RES_CODE Left( [FIRE_CODE],4 ) VB #CalculateField All_Fires_23_24_merge_fields yr_temp Mid( [FIRE_CODE],9,4 ) VB #CalculateField All_Fires_23_24_merge_fields mnth_temp Mid( [FIRE_CODE],6,2 ) VB #CalculateField All_Fires_23_24_merge_fields MONTH [mnth_temp] VB #CalculateField All_Fires_23_24_merge_fields YEAR [yr_temp] VB #CalculateField All_Fires_23_24_merge_fields Yr_mnth "[yr_temp] +"-" + [mnth_temp]" VB #CalculateField All_Fires_23_24_merge_fields LAND_UNIT "Witzenberg Landscape Unit" VB #CalculateField All_Fires_23_24_merge_fields LAND_UNIT "Boland Landscape Unit" VB #CalculateField All_Fires_23_24_merge_fields LAND_UNIT "Kogelberg Landscape Unit" VB #CalculateField All_Fires_23_24_merge_fields LAND_UNIT "Garden Route Landscape Unit" VB #CalculateField All_Fires_23_24_merge_fields LAND_UNIT "Karoo Landscape Unit" VB #CalculateField All_Fires_23_24_merge_fields LAND_UNIT "Anysberg Landscape Unit" VB #CalculateField All_Fires_23_24_merge_fields LAND_UNIT "Overberg Landscape Unit" VB #CalculateField All_Fires_23_24_merge_fields LAND_UNIT "Langeberg Landscape Unit" VB #CalculateField All_Fires_23_24_merge_fields LAND_UNIT "De Hoop Landscape Unit" VB #CalculateField All_Fires_23_24_merge_fields LAND_UNIT "Peninsula Landscape Unit" VB #CalculateField All_Fires_23_24_merge_fields LAND_UNIT "Ceder-Berg Landscape Unit" VB #Sort All_Fires_23_24_merge_fields D:\1_GIS_work\9_00_CNC2024_1161_Fires\1_FINAL\All_fires_23_24_gw.shp "YEAR ASCENDING" URRepairGeometry All_fires_23_24_gw DELETE_NULLRepairGeometry All_fires_23_24_gw DELETE_NULLCalculateField All_fires_23_24_gw FIRE_CODE "DEHP/02/1992/01" VB #CalculateField All_fires_23_24_gw LOCAL_DESC "Witklip Infanta" VB #CalculateField All_fires_23_24_gw LOCAL_DESC "Buffelsfontein" VB #CalculateField All_fires_23_24_gw FIRE_CODE "DEHP/02/1992/02" VB #All_fires_23_24_gw0020.000file://\\CAPWKSLAP165\D$\1_GIS_work\9_00_CNC2024_1161_Fires\1_FINAL\All_fires_23_24_gw.shpLocal Area NetworkGeographicGCS_WGS_1984Angular Unit: Degree (0.017453)<GeographicCoordinateSystem xsi:type='typens:GeographicCoordinateSystem' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/10.8'><WKT>GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433],AUTHORITY["EPSG",4326]]</WKT><XOrigin>-400</XOrigin><YOrigin>-400</YOrigin><XYScale>11258999068426.238</XYScale><ZOrigin>-100000</ZOrigin><ZScale>10000</ZScale><MOrigin>-100000</MOrigin><MScale>10000</MScale><XYTolerance>8.983152841195215e-09</XYTolerance><ZTolerance>0.001</ZTolerance><MTolerance>0.001</MTolerance><HighPrecision>true</HighPrecision><LeftLongitude>-180</LeftLongitude><WKID>4326</WKID><LatestWKID>4326</LatestWKID></GeographicCoordinateSystem>20240805112217002024080511221700 Version 6.2 (Build 9200) ; Esri ArcGIS 10.8.1.14362All_fires_23_24_gwShapefile0.000datasetEPSG6.14(3.0.1)0SimpleFALSE0FALSEFALSEAll_fires_23_24_gwFeature Class0FIDFIDOID400Internal feature number.EsriSequential unique whole numbers that are automatically generated.ShapeShapeGeometry000Feature geometry.EsriCoordinates defining the features.IDIDDouble16160FIRE_CODEFIRE_CODEString1600FILE_NAMEFILE_NAMEString1600FIREWEBFIREWEBString1600RES_CODERES_CODEString500LAND_UNITLAND_UNITString5000MONTHMONTHInteger550YEARYEARInteger10100RES_CENTRERES_CENTREString25400RES_NAMERES_NAMEString10000LOCAL_DESCLOCAL_DESCString10000DATE_STARTDATE_STARTString1500DATE_EXTINDATE_EXTINString1500DATE_WITHDDATE_WITHDString1500REPORT_OFFREPORT_OFFString7500POLIC_CASEPOLIC_CASEString5000IGNITIONCAIGNITIONCAString5000Yr_mnthYr_mnthString1000Area_haArea_haDouble1900RESCODE_LURESCODE_LUString100020240805
diff --git a/data/manual_download/All_fires_23_24_gw/All_fires_23_24_gw.shx b/data/manual_download/All_fires_23_24_gw/All_fires_23_24_gw.shx
new file mode 100644
index 00000000..6b52ca09
Binary files /dev/null and b/data/manual_download/All_fires_23_24_gw/All_fires_23_24_gw.shx differ
diff --git a/data/manual_download/README.md b/data/manual_download/README.md
new file mode 100644
index 00000000..32b307d4
--- /dev/null
+++ b/data/manual_download/README.md
@@ -0,0 +1,3 @@
+# Raw Data
+
+This folder contains files that cannot be programmatically downloaded (such as those from BGIS)
diff --git a/decrypt_secret.sh b/decrypt_secret.sh
new file mode 100644
index 00000000..81deface
--- /dev/null
+++ b/decrypt_secret.sh
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+# Decrypt the file
+
+mkdir -p $HOME/.config/earthengine/ndef/
+
+# --batch to prevent interactive command
+# --yes to assume "yes" for questions
+
+gpg --quiet --batch --yes --decrypt --passphrase="$RGEE_SECRET" \
+--output $HOME/.config/earthengine/ndef/20061abcbc1c6ecf51bd9cf7e37350f6_bmaitner@gmail.com $HOME/emma_envdata/scratch_code/20061abcbc1c6ecf51bd9cf7e37350f6_bmaitner@gmail.com.gpg
+
+gpg --quiet --batch --yes --decrypt --passphrase="$RGEE_SECRET" \
+--output $HOME/.config/earthengine/ndef/credentials $HOME/emma_envdata/scratch_code/credentials.gpg
diff --git a/docs/APPEEARS_SETUP.md b/docs/APPEEARS_SETUP.md
new file mode 100644
index 00000000..74abefde
--- /dev/null
+++ b/docs/APPEEARS_SETUP.md
@@ -0,0 +1,110 @@
+# AppEEARS Setup Guide
+
+This project now uses NASA AppEEARS instead of Google Earth Engine for satellite data access.
+
+## Prerequisites
+
+1. **NASA EarthData Account**: Register at https://urs.earthdata.nasa.gov/
+2. **AppEEARS Access**: Approve AppEEARS application at https://appeears.earthdatacloud.nasa.gov/
+
+## Local Setup
+
+Set environment variables in your `.Renviron` file:
+
+```r
+# Edit .Renviron
+usethis::edit_r_environ()
+
+# Add these lines:
+EARTHDATA_USER=your_username
+EARTHDATA_PASSWORD=your_password
+```
+
+Restart R session for changes to take effect.
+
+## GitHub Actions Setup
+
+Add secrets to your repository:
+
+1. Go to repository Settings → Secrets and variables → Actions
+2. Add two secrets:
+ - `EARTHDATA_USER`: Your NASA EarthData username
+ - `EARTHDATA_PASSWORD`: Your NASA EarthData password
+
+## Verify Setup
+
+Test authentication in R:
+
+```r
+library(appeears)
+rs_login(
+ user = Sys.getenv("EARTHDATA_USER"),
+ password = Sys.getenv("EARTHDATA_PASSWORD")
+)
+
+# List available products
+rs_products()
+```
+
+## Migration Notes
+
+### Changes from rgee to AppEEARS
+
+- **Authentication**: Simple username/password instead of service account JSON
+- **Output format**: Monthly NetCDF files instead of individual GeoTIFFs
+- **Storage efficiency**: ~20% reduction in file sizes
+- **Simpler CI/CD**: No Python/conda dependencies required
+
+### Product Mapping
+
+| Current (rgee) | AppEEARS Product | Status |
+|----------------|------------------|--------|
+| MODIS Fire (MCD64A1) | MCD64A1.061 | ✅ Migrated |
+| MODIS NDVI (MOD13A1) | MOD13A1.061 | ✅ Migrated |
+| VIIRS NDVI | VNP13A1.001 | 🔄 Pending |
+| KNDVI | Calculate from reflectances | 🔄 Pending |
+| CHELSA Climate | Direct download (unchanged) | ✅ No change |
+| NASADEM | NASADEM.001 | 🔄 Pending |
+
+### Release Tags
+
+NetCDF outputs use new tag names to distinguish from GeoTIFF:
+
+- `raw_fire_modis_nc` - Raw fire monthly NetCDF
+- `raw_ndvi_modis_nc` - Raw NDVI monthly NetCDF
+- etc.
+
+### File Naming Convention
+
+Monthly NetCDF files follow the pattern: `{product}_{collection}_{YYYY-MM}.nc`
+
+Examples:
+- `fire_MCD64A1_2025-12.nc`
+- `ndvi_MOD13A1_2025-12.nc`
+
+## Troubleshooting
+
+### Authentication Errors
+
+If you see "EARTHDATA credentials not found":
+1. Check environment variables are set: `Sys.getenv("EARTHDATA_USER")`
+2. Restart R session after setting `.Renviron`
+3. Verify credentials at https://urs.earthdata.nasa.gov/
+
+### AppEEARS Task Failures
+
+Check task status:
+```r
+appeears::rs_status(task_id = "your_task_id")
+```
+
+Common issues:
+- Date range too large (split into smaller requests)
+- Invalid area of interest (ensure valid WGS84 coordinates)
+- Service temporarily unavailable (retry after delay)
+
+## Resources
+
+- [AppEEARS Documentation](https://appeears.earthdatacloud.nasa.gov/help)
+- [appeears R package](https://docs.ropensci.org/appeears/)
+- [NASA EarthData](https://earthdata.nasa.gov/)
diff --git a/emma-targets.Rproj b/emma-targets.Rproj
index aad884da..699e3ae1 100644
--- a/emma-targets.Rproj
+++ b/emma-targets.Rproj
@@ -1,4 +1,5 @@
Version: 1.0
+ProjectId: d3bc4aff-88e6-458a-b2fc-6bc8e9e06f1c
RestoreWorkspace: No
SaveWorkspace: No
diff --git a/emma_envdata.code-workspace b/emma_envdata.code-workspace
new file mode 100644
index 00000000..876a1499
--- /dev/null
+++ b/emma_envdata.code-workspace
@@ -0,0 +1,8 @@
+{
+ "folders": [
+ {
+ "path": "."
+ }
+ ],
+ "settings": {}
+}
\ No newline at end of file
diff --git a/img/network.png b/img/network.png
new file mode 100644
index 00000000..a74d2d3f
Binary files /dev/null and b/img/network.png differ
diff --git a/R/clean_up.R b/old/clean_up.R
similarity index 100%
rename from R/clean_up.R
rename to old/clean_up.R
diff --git a/R/domain_remnants.R b/old/domain_remnants.R
similarity index 100%
rename from R/domain_remnants.R
rename to old/domain_remnants.R
diff --git a/R/domain_remnants_release.R b/old/domain_remnants_release.R
similarity index 100%
rename from R/domain_remnants_release.R
rename to old/domain_remnants_release.R
diff --git a/R/get_domain.R b/old/get_domain.R
similarity index 100%
rename from R/get_domain.R
rename to old/get_domain.R
diff --git a/R/get_release_elevation_nasadem.R b/old/get_release_elevation_nasadem.R
similarity index 100%
rename from R/get_release_elevation_nasadem.R
rename to old/get_release_elevation_nasadem.R
diff --git a/R/get_release_fire_modis.R b/old/get_release_fire_modis.R
similarity index 100%
rename from R/get_release_fire_modis.R
rename to old/get_release_fire_modis.R
diff --git a/R/get_release_kndvi_modis.R b/old/get_release_kndvi_modis.R
similarity index 100%
rename from R/get_release_kndvi_modis.R
rename to old/get_release_kndvi_modis.R
diff --git a/R/get_release_mean_ndvi_modis.R b/old/get_release_mean_ndvi_modis.R
similarity index 100%
rename from R/get_release_mean_ndvi_modis.R
rename to old/get_release_mean_ndvi_modis.R
diff --git a/R/get_release_ndvi_dates_modis.R b/old/get_release_ndvi_dates_modis.R
similarity index 100%
rename from R/get_release_ndvi_dates_modis.R
rename to old/get_release_ndvi_dates_modis.R
diff --git a/R/get_release_ndvi_dates_viirs.R b/old/get_release_ndvi_dates_viirs.R
similarity index 100%
rename from R/get_release_ndvi_dates_viirs.R
rename to old/get_release_ndvi_dates_viirs.R
diff --git a/R/get_release_ndvi_modis.R b/old/get_release_ndvi_modis.R
similarity index 100%
rename from R/get_release_ndvi_modis.R
rename to old/get_release_ndvi_modis.R
diff --git a/R/get_release_ndvi_viirs.R b/old/get_release_ndvi_viirs.R
similarity index 100%
rename from R/get_release_ndvi_viirs.R
rename to old/get_release_ndvi_viirs.R
diff --git a/R/get_release_ndwi_modis.R b/old/get_release_ndwi_modis.R
similarity index 100%
rename from R/get_release_ndwi_modis.R
rename to old/get_release_ndwi_modis.R