Skip to content

Commit f148287

Browse files
authored
Merge pull request #4083 from sarahkanee/fix/chirps-preprocess-dates
Set up config file for irrigation workflow
2 parents 3d0a777 + 058ba1d commit f148287

8 files changed

Lines changed: 104 additions & 53 deletions

File tree

modules/data.remote/inst/ccmmf/documentation/setup_env.sh

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@
1111
# products/inventory -- Management Tracking outputs
1212
# Finished tree: documentation/sessions/00-setup.md (Data layout).
1313
# Product overview: ../README.md. Paths created in Session 0.
14-
# Irrigation: workflows/irrigation-statewide/config_paths.yml keys should point into this tree;
15-
# CHIRPS_DIR/CIMIS_DIR are raw staging; parcel extracts from preprocessing/ may differ.
1614

1715
# Workspace roots. Set CCMMF_BASE once; CODE and ROOT follow unless you override them.
1816
export CCMMF_BASE="${CCMMF_BASE:-$HOME}"
@@ -55,11 +53,11 @@ export HLS_CREDENTIAL_FOLDER="${HLS_CREDENTIAL_FOLDER:-$HOME}" # dir
5553
export CDL_DIR="${CDL_DIR:-$CCMMF_ROOT/CDL}" # CDL GeoTIFF
5654

5755
export CLIMATE_ROOT="${CLIMATE_ROOT:-$CCMMF_ROOT/climate}"
58-
export CHIRPS_DIR="${CHIRPS_DIR:-$CLIMATE_ROOT/CHIRPS}" # raw CHIRPS staging; irrig YAML chirps_precip_path = preprocess extract dir
59-
export CIMIS_DIR="${CIMIS_DIR:-$CLIMATE_ROOT/CIMIS}" # raw CIMIS staging; irrig YAML cimis_etref_path = preprocess extract dir
56+
export CHIRPS_DIR="${CHIRPS_DIR:-$CLIMATE_ROOT/CHIRPS}" # raw CHIRPS staging
57+
export CIMIS_DIR="${CIMIS_DIR:-$CLIMATE_ROOT/CIMIS}" # raw CIMIS staging
6058

6159
export SOILS_ROOT="${SOILS_ROOT:-$CCMMF_ROOT/soils}"
62-
export SSURGO_DIR="${SSURGO_DIR:-$SOILS_ROOT/SSURGO}" # gdb + weights; also set irrig ssurgo_* YAML keys
60+
export SSURGO_DIR="${SSURGO_DIR:-$SOILS_ROOT/SSURGO}" # gdb + weights
6361

6462
# --- Lookups ---
6563
export LOOKUPS_ROOT="${LOOKUPS_ROOT:-$CCMMF_ROOT/lookups}"
@@ -85,6 +83,31 @@ export COUNTY_TRANSITION_MATRICES_DIR="${COUNTY_TRANSITION_MATRICES_DIR:-$LANDIQ
8583
# Scheduler-agnostic submit (sbatch, qsub, or local). See documentation/submit_job.sh
8684
export CCMMF_SUBMIT="${CCMMF_SUBMIT:-$CCMMF_CODE/documentation/submit_job.sh}"
8785

86+
export CHIRPS_PRECIP_PATH="${CHIRPS_PRECIP_PATH:-$PRODUCTS_INVENTORY/irrigation/chirps-extracted}"
87+
export CIMIS_ETREF_PATH="${CIMIS_ETREF_PATH:-$PRODUCTS_INVENTORY/irrigation/cimis-extracted}"
88+
export CHIRPS_PREPROCESS_DIR="${CHIRPS_PREPROCESS_DIR:-_results_chirps}"
89+
export CIMIS_PREPROCESS_DIR="${CIMIS_PREPROCESS_DIR:-_results_v2}"
90+
export SSURGO_PREPROCESS_DIR="${SSURGO_PREPROCESS_DIR:-_results}"
91+
92+
cat > "$(dirname "$IRRIG_PREPROCESS")/config_paths.yml" <<EOF
93+
default:
94+
landiq_parcels_gpkg: "$LANDIQ_HARMONIZED/parcels-consolidated.gpkg"
95+
year1: $PRIOR_YEAR
96+
year2: $TARGET_YEAR
97+
chirps_dir: "$CHIRPS_DIR"
98+
chirps_preprocess_dir: "$CHIRPS_PREPROCESS_DIR"
99+
chirps_precip_path: "$CHIRPS_PRECIP_PATH"
100+
cimis_dir: "$CIMIS_DIR"
101+
cimis_preprocess_dir: "$CIMIS_PREPROCESS_DIR"
102+
cimis_etref_path: "$CIMIS_ETREF_PATH"
103+
ssurgo_gdb_path: "$SSURGO_DIR/gSSURGO_CA.gdb"
104+
ssurgo_preprocess_dir: "$SSURGO_PREPROCESS_DIR"
105+
ssurgo_weights_path: "$SSURGO_DIR/ssurgo-weights.parquet"
106+
event_output_dir: "$EVENT_OUTPUT_DIR"
107+
crops_path: "$LANDIQ_GAPFILLED/crops_all_years.parq"
108+
mslsp_path: "$MATCHED_DIR"
109+
EOF
110+
88111
echo "[setup_env] BASE=$CCMMF_BASE ROOT=$CCMMF_ROOT CODE=$CCMMF_CODE YEARS=$PRIOR_YEAR/$TARGET_YEAR"
89112
echo "[setup_env] LANDIQ_GAPFILLED=$LANDIQ_GAPFILLED"
90113
echo "[setup_env] HLS_ROOT=$HLS_ROOT HLS_PARCEL_TILES_DIR=$HLS_PARCEL_TILES_DIR"

workflows/irrigation-statewide/_targets.R

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ config_base <- config::get(
1919
)
2020
config_paths <- config::get(
2121
file = file.path(root_dir, "config_paths.yml"),
22-
config = Sys.getenv("IRRIGATION_PATHS_CONFIG", "default")
22+
config = "default"
2323
)
2424
config <- config::merge(config_base, config_paths)
2525

workflows/irrigation-statewide/config_paths.yml

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,18 @@
11
default:
2+
# Preprocess
3+
landiq_parcels_gpkg: "/projectnb/dietzelab/ccmmf/LandIQ-harmonized-v4.1/parcels.gpkg"
4+
year1: 2023
5+
year2: 2024
6+
chirps_dir: "/projectnb/dietzelab/ccmmf/management/irrigation/"
7+
chirps_preprocess_dir: "_results_chirps"
8+
chirps_precip_path: "/projectnb/dietzelab/ccmmf/data/chirps-extracted"
9+
cimis_dir: "/projectnb/dietzelab/ccmmf/data_raw/cimis/cimis"
10+
cimis_preprocess_dir: "_results_v2"
11+
cimis_etref_path: "/projectnb/dietzelab/ccmmf/data/cimis-extracted"
12+
ssurgo_gdb_path: "/projectnb/dietzelab/ccmmf/data_raw/ssurgo/gSSURGO_CA.gdb"
13+
ssurgo_preprocess_dir: "_results"
14+
ssurgo_weights_path: "/projectnb/dietzelab/ccmmf/data_raw/ssurgo/ssurgo-weights.parquet"
15+
# tar_make
216
event_output_dir: "/projectnb/dietzelab/ccmmf/usr/ashiklom/event-outputs"
317
crops_path: "/projectnb/dietzelab/ccmmf/LandIQ-harmonized-v4.1/crops_all_years.parq"
418
mslsp_path: "/projectnb/dietzelab/ccmmf/management/phenology/matched_landiq_mslsp_v4.1"
5-
cimis_etref_path: "/projectnb/dietzelab/ccmmf/data/cimis-extracted"
6-
chirps_precip_path: "/projectnb/dietzelab/ccmmf/data/chirps-extracted"
7-
ssurgo_weights_path: "/projectnb/dietzelab/ccmmf/data_raw/ssurgo/ssurgo-weights.parquet"
8-
ssurgo_gdb_path: "/projectnb/dietzelab/ccmmf/data_raw/ssurgo/gSSURGO_CA.gdb"

workflows/irrigation-statewide/preprocessing/chirps-preprocess.R

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,20 @@
11
#!/usr/bin/env Rscript
22

3-
chirps_dir <- Sys.getenv("CHIRPS_DIR", "/projectnb/dietzelab/ccmmf/management/irrigation/")
4-
chirps_outdir <- Sys.getenv("CHIRPS_EXTRACT_DIR", "_results_chirps")
3+
root_dir <- here::here("workflows/irrigation-statewide")
4+
cfg <- config::get(
5+
file = file.path(root_dir, "config_paths.yml"),
6+
config = "default"
7+
)
8+
9+
chirps_dir <- cfg[["chirps_dir"]]
10+
chirps_outdir <- cfg[["chirps_preprocess_dir"]]
11+
parcel_file <- cfg[["landiq_parcels_gpkg"]]
512
chirpsfiles <- list.files(
613
chirps_dir,
714
"chirps-v2.0.*.nc",
815
full.names = TRUE
916
)
1017

11-
parcel_file <- Sys.getenv(
12-
"LANDIQ_PARCELS_GPKG",
13-
"/projectnb/dietzelab/ccmmf/LandIQ-harmonized-v4.1/parcels.gpkg"
14-
)
15-
1618
extract_chirps <- function(fname, parcel_file, outdir = "_results_chirps") {
1719
# fname <- chirpsfiles[[1]]
1820
parcels_sf <- sf::read_sf(parcel_file, use_stream = TRUE)
@@ -52,12 +54,12 @@ extract_chirps <- function(fname, parcel_file, outdir = "_results_chirps") {
5254
tidyr::pivot_longer(
5355
-c("parcel_id"),
5456
names_to = "yday",
55-
names_pattern = ".*\\.days_p05_(\\d+)$",
57+
names_pattern = ".*_(\\d+)$",
5658
names_transform = as.integer,
5759
values_to = "precip_mm_day"
5860
) |>
5961
dplyr::mutate(
60-
date = date0 + .data$yday,
62+
date = date0 + .data$yday - 1L, # precip_1: Jan 1 + 1 = Jan 2 without -1
6163
.keep = "unused"
6264
) |>
6365
dplyr::relocate("date", .after = "parcel_id") |>

workflows/irrigation-statewide/preprocessing/cimis-01-weights.R

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,27 @@ library(Matrix)
77
library(exactextractr)
88
library(arrow)
99

10-
parcel_file <- Sys.getenv(
11-
"LANDIQ_PARCELS_GPKG",
12-
"/projectnb/dietzelab/ccmmf/LandIQ-harmonized-v4.1/parcels.gpkg"
10+
root_dir <- here::here("workflows/irrigation-statewide")
11+
cfg <- config::get(
12+
file = file.path(root_dir, "config_paths.yml"),
13+
config = "default"
1314
)
14-
cimis_dir <- Sys.getenv("CIMIS_DIR", "/projectnb/dietzelab/ccmmf/data_raw/cimis/cimis")
1515

16-
outdir <- "_results_v2"
16+
parcel_file <- cfg[["landiq_parcels_gpkg"]]
17+
cimis_dir <- cfg[["cimis_dir"]]
18+
year1 <- as.character(cfg[["year1"]])
19+
year2 <- as.character(cfg[["year2"]])
20+
outdir <- cfg[["cimis_preprocess_dir"]]
1721
dir.create(outdir, showWarnings = FALSE, recursive = TRUE)
1822

1923
parcels_sf <- read_sf(parcel_file, use_stream = TRUE)
2024

21-
cimis_f0 <- file.path(cimis_dir, "2019", "01", "01", "ETo.asc.gz")
25+
cimis_f0 <- file.path(cimis_dir, year1, "01", "01", "ETo.asc.gz")
2226
stopifnot(file.exists(cimis_f0))
2327

2428
# A subset of CIMIS files, like this one, have slightly smaller dimensions for
2529
# some reason. Compute their weights separately.
26-
cimis_falt <- file.path(cimis_dir, "2015", "03", "01", "ETo.asc.gz")
30+
cimis_falt <- file.path(cimis_dir, year2, "01", "01", "ETo.asc.gz")
2731
stopifnot(file.exists(cimis_falt))
2832

2933
n_parcels <- nrow(parcels_sf)

workflows/irrigation-statewide/preprocessing/cimis-02-extract.R

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,21 +13,25 @@ library(purrr)
1313
library(arrow)
1414
library(clustermq)
1515

16+
root_dir <- here::here("workflows/irrigation-statewide")
17+
cfg <- config::get(
18+
file = file.path(root_dir, "config_paths.yml"),
19+
config = "default"
20+
)
21+
1622
n_workers <- as.integer(Sys.getenv("CLUSTERMQ_N_JOBS", "20"))
1723
walltime <- "02:00:00"
1824

19-
cimis_root <- Sys.getenv("CIMIS_DIR", "/projectnb/dietzelab/ccmmf/data_raw/cimis/cimis")
20-
21-
outdir <- "_results_v2/daily-raw"
25+
cimis_root <- cfg[["cimis_dir"]]
26+
preprocess_dir <- cfg[["cimis_preprocess_dir"]]
27+
outdir <- file.path(preprocess_dir, "daily-raw")
2228
dir.create(outdir, recursive = TRUE, showWarnings = FALSE)
2329

24-
W <- readRDS("_results_v2/spatial_weights.rds")
30+
W <- readRDS(file.path(preprocess_dir, "spatial_weights.rds"))
31+
weights_alt <- file.path(preprocess_dir, "spatial_weights_alt.rds")
2532

2633
cimis_manifest <- "cimis_files.txt"
27-
years <- seq(
28-
as.integer(Sys.getenv("START_YEAR", "2015")),
29-
as.integer(Sys.getenv("END_YEAR", "2024"))
30-
)
34+
years <- seq(as.integer(cfg[["year1"]]), as.integer(cfg[["year2"]]))
3135
if (!file.exists(cimis_manifest)) {
3236
get_cimis_files <- function(year) {
3337
ydir <- file.path(cimis_root, year)
@@ -47,7 +51,7 @@ if (!file.exists(cimis_manifest)) {
4751
}
4852

4953
# Extract
50-
process_file <- function(fname, W, outdir) {
54+
process_file <- function(fname, W, outdir, weights_alt) {
5155
day <- basename(dirname(fname))
5256
month <- basename(dirname(dirname(fname)))
5357
year <- basename(dirname(dirname(dirname(fname))))
@@ -66,7 +70,7 @@ process_file <- function(fname, W, outdir) {
6670
rsize <- terra::size(r)
6771
if (rsize == 285600) {
6872
# Alternate size files -- use alternate weights
69-
W <- readRDS("_results_v2/spatial_weights_alt.rds")
73+
W <- readRDS(weights_alt)
7074
} else if (rsize != 276000) {
7175
stop("File ", fname, " has unexpected size ", rsize)
7276
}
@@ -99,8 +103,8 @@ process_file <- function(fname, W, outdir) {
99103
cimis_long <- Q(
100104
fun = process_file,
101105
fname = cimis_files,
102-
const = list(W = W, outdir = outdir),
103-
n_jobs = n_workers, # SGE array size -- persistent worker processes
106+
const = list(W = W, outdir = outdir, weights_alt = weights_alt),
107+
n_jobs = n_workers, # SGE array size persistent worker processes
104108
template = list(cores = 1, walltime = walltime),
105109
fail_on_error = FALSE
106110
)

workflows/irrigation-statewide/preprocessing/ssurgo-01-spatial-weights.R

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,13 @@ library(dplyr)
1212
library(arrow) # for efficient weight storage
1313
library(clustermq)
1414

15-
outdir <- "_results"
15+
root_dir <- here::here("workflows/irrigation-statewide")
16+
cfg <- config::get(
17+
file = file.path(root_dir, "config_paths.yml"),
18+
config = "default"
19+
)
20+
21+
outdir <- cfg[["ssurgo_preprocess_dir"]]
1622
dir.create(outdir, showWarnings = FALSE, recursive = TRUE)
1723

1824
# Number of parcels to process at a time
@@ -21,10 +27,7 @@ dir.create(outdir, showWarnings = FALSE, recursive = TRUE)
2127
parcel_chunk_size <- 2000
2228

2329
# Transform ssurgo mupolygon column to parquet for faster reading
24-
gdb_path <- Sys.getenv(
25-
"SSURGO_GDB_PATH",
26-
"/projectnb/dietzelab/ccmmf/data_raw/ssurgo/gSSURGO_CA.gdb"
27-
)
30+
gdb_path <- cfg[["ssurgo_gdb_path"]]
2831
mupoly_path <- "./ssurgo_mupolygons.parquet"
2932
if (!file.exists(mupoly_path)) {
3033
message("Creating parquet version of mupolygons for faster reads")
@@ -44,10 +47,7 @@ if (!file.exists(mupoly_path)) {
4447
rm(mupoly_raw, mupoly)
4548
}
4649

47-
parcels_path <- Sys.getenv(
48-
"LANDIQ_PARCELS_GPKG",
49-
"/projectnb/dietzelab/ccmmf/LandIQ-harmonized-v4.1/parcels.gpkg"
50-
) #nolint
50+
parcels_path <- cfg[["landiq_parcels_gpkg"]]
5151

5252
parcel_ids <- st_read(
5353
parcels_path,

workflows/irrigation-statewide/preprocessing/ssurgo-02-combine.R

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,25 +3,33 @@
33
library(arrow)
44
library(duckdb)
55

6+
root_dir <- here::here("workflows/irrigation-statewide")
7+
cfg <- config::get(
8+
file = file.path(root_dir, "config_paths.yml"),
9+
config = "default"
10+
)
11+
12+
preprocess_dir <- cfg[["ssurgo_preprocess_dir"]]
13+
weights_out <- cfg[["ssurgo_weights_path"]]
14+
615
conn <- dbConnect(duckdb(), dbdir = ":memory:")
716

817
dbExecute(conn, "SET memory_limit = '32GB'")
918

10-
dbExecute(conn, "
19+
dbExecute(conn, sprintf("
1120
COPY (
1221
SELECT
1322
*
14-
FROM read_parquet('_results/*.parquet')
23+
FROM read_parquet('%s/*.parquet')
1524
ORDER BY parcel_id ASC
1625
)
17-
TO 'ssurgo-weights.parquet'
26+
TO '%s'
1827
(
1928
FORMAT PARQUET,
2029
OVERWRITE_OR_IGNORE,
2130
COMPRESSION 'ZSTD'
2231
);
23-
"
24-
)
32+
", preprocess_dir, weights_out))
2533

2634
dbDisconnect(conn, shutdown = TRUE)
2735

@@ -30,7 +38,7 @@ message(
3038
"Testing to confirm we can open the data ",
3139
"and it produces valid weights."
3240
)
33-
dat <- open_dataset("ssurgo-weights.parquet")
41+
dat <- open_dataset(weights_out)
3442

3543
dsub <- dat |>
3644
dplyr::filter(parcel_id %in% c(1, 100, 1000, 10000, 100000)) |>

0 commit comments

Comments
 (0)