R/write_ootb_sky_model.R

Defines functions write_ootb_sky_model

Documented in write_ootb_sky_model

#' Write out-of-the-box CIE sky model fitting
#'
#' @inheritParams ootb_interpolate_and_merge
#' @param name Character vector of length one. File name without extension. If
#'   needed, a file path can be added to the names. For example:
#'   `"C:/Users/Doe/Documents/DSCN4500"`.
#'
#' @returns No return value. Called for side effects.
#' @export
#'
#' @family Tool Functions
#'
write_ootb_sky_model <- function(ootb_sky, name) {

  sink(paste0(name, ".txt"))
  .print <- function(x) cat(x, "\n")  # Use cat() to avoid [1]

  paste0(rep("-", 80), collapse = "") %>% .print()
  .print("v0.2 Generated by rcaiman::write_ootb_sky_model(): do not edit by hand")
  paste0(rep("-", 80), collapse = "") %>% .print()

  ootb_sky$model$sun_coord$zenith_azimuth[1] %>% paste("sun_theta:", .) %>% .print()
  ootb_sky$model$sun_coord$zenith_azimuth[2] %>% paste("sun_phi:", .) %>% .print()
  ootb_sky$model$zenith_dn %>% paste("zenith_dn:", .)%>% .print()
  ootb_sky$model$start[1] %>% paste("start_a:", .) %>% .print()
  ootb_sky$model$start[2] %>% paste("start_b:", .) %>% .print()
  ootb_sky$model$start[3] %>% paste("start_c:", .) %>% .print()
  ootb_sky$model$start[4] %>% paste("start_d:", .) %>% .print()
  ootb_sky$model$start[5] %>% paste("start_e:", .) %>% .print()
  ootb_sky$model$method %>% unname %>% paste("method:", .) %>% .print()
  ootb_sky$model$coef[1] %>% unname %>% paste("fit_a:", .) %>% .print()
  ootb_sky$model$coef[2] %>% unname %>% paste("fit_b:", .) %>% .print()
  ootb_sky$model$coef[3] %>% unname %>% paste("fit_c:", .) %>% .print()
  ootb_sky$model$coef[4] %>% unname %>% paste("fit_d:", .) %>% .print()
  ootb_sky$model$coef[5] %>% unname %>% paste("fit_e:", .) %>% .print()

  paste0(rep("-", 80), collapse = "") %>% .print()
  ootb_sky$model_validation$lm %>% summary() %>% print()
  paste0(rep("-", 80), collapse = "") %>% .print()

  paste("grid:", names(ootb_sky$g)) %>% .print()
  ootb_sky$dist_to_black %>% paste("dist_to_black:", .) %>% .print()
  ootb_sky$min_spherical_dist %>% paste("min_spherical_dist:", .) %>% .print()
  ootb_sky$sky_points %>% nrow() %>% paste("sky_points_no:", .) %>% .print()
  ootb_sky$sky_points$is_outlier %>% sum() %>% paste("outliers_no:", .) %>% .print()
  ootb_sky$model_validation$rmse %>% paste("RMSE:", .) %>% .print()
  ootb_sky$model_validation$r_squared %>% paste("r_squared:", .) %>% .print()
  ootb_sky$model_validation$mae %>% paste("mae:", .) %>% .print()

  sink()

  # Save sky points
  cells <- terra::cellFromRowCol(ootb_sky$sky,
                                 ootb_sky$sky_points$row,
                                 ootb_sky$sky_points$col)
  xy <- terra::xyFromCell(ootb_sky$sky, cells)
  p <- terra::vect(xy, "points")
  terra::crs(p) <- crs(ootb_sky$sky)

  terra::writeVector(p,
                     paste0(name, "_sky_points", ".gpkg"),
                     filetype = "GPKG", )

  # Save data for model validation
  df <- data.frame(pred = ootb_sky$model_validation$pred,
                   obs = ootb_sky$model_validation$obs)
  utils::write.csv2(df, paste0(name, "_val", ".csv"))
}
GastonMauroDiaz/rcaiman documentation built on April 14, 2025, 9:39 a.m.