From dfbe2fcefc461c0dced07c8c10bf720b33309e51 Mon Sep 17 00:00:00 2001 From: nperez Date: Mon, 16 Nov 2020 17:35:50 +0100 Subject: [PATCH 01/12] New use case for rotated coordinates --- inst/doc/figures/Rotated_Coordinates.png | Bin 0 -> 88892 bytes inst/doc/usecase.md | 5 +- inst/doc/usecase/ex1_12_rotated_coordinates.R | 63 ++++++++++++++++++ 3 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 inst/doc/figures/Rotated_Coordinates.png create mode 100644 inst/doc/usecase/ex1_12_rotated_coordinates.R diff --git a/inst/doc/figures/Rotated_Coordinates.png b/inst/doc/figures/Rotated_Coordinates.png new file mode 100644 index 0000000000000000000000000000000000000000..c5bc9cf55905972921a816e1bf10a1b8c1e9d8fb GIT binary patch literal 88892 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 U&O@3E?Oh0E1$FsyS<9FI3+8WAMgRZ+ literal 0 HcmV?d00001 diff --git a/inst/doc/usecase.md b/inst/doc/usecase.md index 82e0bf7..e62ac23 100644 --- a/inst/doc/usecase.md +++ b/inst/doc/usecase.md @@ -49,7 +49,10 @@ You can find more explanation in FAQ [How-to-20](inst/doc/faq.md#20-use-metadata 11. [Three methods to load experimental files with different member and version](inst/doc/usecase/ex1_11_expid_member_version.R) This script shows three ways to load the data with different expid - member - version combination. It is useful for climate prediction of multiple experiments. - + + 12. [Load and plot data in rotated coordintaes](inst/doc/usecase/ex1_12_rotated_coordinates.R) + This script shows how to load and plot data in rotated coordinates using Monarch-dust simulations. + 2. **Execute computation (use `Compute()`)** 1. [Function working on time dimension](inst/doc/usecase/ex2_1_timedim.R) diff --git a/inst/doc/usecase/ex1_12_rotated_coordinates.R b/inst/doc/usecase/ex1_12_rotated_coordinates.R new file mode 100644 index 0000000..e3e7260 --- /dev/null +++ b/inst/doc/usecase/ex1_12_rotated_coordinates.R @@ -0,0 +1,63 @@ +# Núria Pérez-Zanón +# Loading and plotting data in rotated coordinates +# Monarch-dustclim +# Required modules in workstation: R 3.6.1 and GDAL/2.2.1-foss-2015a-GEOS-3.8.0 +#------------------------------- +library(startR) + +obs_path <- '/esarchive/exp/monarch-dustclim/3hourly/$var$/$var$_$date$03_av_an.nc' + +date <- c('20131229', '20131230') +# two temporal dimensions: one for days and another four hours +data_split <- Start(dataset = obs_path, + var = 'od550du', + lev = 'all', + date = date, + time = 'all', + rlat = 'all', + rlon = 'all', + return_vars = list(lev = NULL, time = NULL, + rlat = NULL, rlon = NULL, + lat = NULL, lon = NULL), + retrieve = TRUE, num_procs = 1) +# one temporal dimension +data <- Start(dataset = obs_path, + var = 'od550du', + lev = 'all', + date = date, + time = 'all', + rlat = 'all', + rlon = 'all', + time_across = 'date', + merge_across_dims = TRUE, + return_vars = list(lev = NULL, time = 'date', + rlat = NULL, rlon = NULL, + lat = NULL, lon = NULL), + retrieve = TRUE, num_procs = 1) +# check both are consistent: +all(data[1,1,1,1:8,,]==data_split[1,1,1,1,,,]) + +# Save important information from attributes +lat <- attributes(data)$Variables$common$lat +lon <- attributes(data)$Variables$common$lon +rlat <- attributes(data)$Variables$common$rlat +rlon <- attributes(data)$Variables$common$rlon +# Or check information: +attributes(data)$Variables$common$lev +#attributes(data)$Variables$common$time + +# PLOT: +library(sf) +library(ggplot2) +map <- data.frame(rlat = rep(rlat, length(rlon)), + rlon = sort(rep(rlon, length(rlat))), datos = as.vector(map)) +dat_map <- st_as_sf(map, coords = c("rlon", "rlat"), crs = 4326) +x <- lwgeom::st_transform_proj(dat_map, c(st_crs(4326)$proj4string, "+proj=ob_tran +o_proj=longlat +o_lon_p=-160 +o_lat_p=55 +lon_0=180 +to_meter=0.01745329")) +plot(x) +bbox <- st_bbox(x) +borders <- st_as_sf(maps::map('world', plot = FALSE, fill = TRUE)) +st_crs(x) = NA # ?! (!) +st_crs(x) = 4326 +ggplot() + + geom_sf(data=x, aes(color=datos)) + + geom_sf(data = borders, fill=NA, colour="black") + coord_sf(xlim = bbox[c(1,3)],ylim = bbox[c(2,4)]) -- GitLab From cfdfb6a657e2f8d5c2efc5a9b954754518ec19c3 Mon Sep 17 00:00:00 2001 From: nperez Date: Mon, 16 Nov 2020 17:39:18 +0100 Subject: [PATCH 02/12] Resize plot --- inst/doc/usecase.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/inst/doc/usecase.md b/inst/doc/usecase.md index e62ac23..4709e9f 100644 --- a/inst/doc/usecase.md +++ b/inst/doc/usecase.md @@ -51,8 +51,9 @@ You can find more explanation in FAQ [How-to-20](inst/doc/faq.md#20-use-metadata This script shows three ways to load the data with different expid - member - version combination. It is useful for climate prediction of multiple experiments. 12. [Load and plot data in rotated coordintaes](inst/doc/usecase/ex1_12_rotated_coordinates.R) + This script shows how to load and plot data in rotated coordinates using Monarch-dust simulations. - + 2. **Execute computation (use `Compute()`)** 1. [Function working on time dimension](inst/doc/usecase/ex2_1_timedim.R) -- GitLab From df4d12a82e2464adc574e41601357a1a6694a261 Mon Sep 17 00:00:00 2001 From: nperez Date: Mon, 16 Nov 2020 17:41:48 +0100 Subject: [PATCH 03/12] Remove empty line --- inst/doc/usecase.md | 1 - 1 file changed, 1 deletion(-) diff --git a/inst/doc/usecase.md b/inst/doc/usecase.md index 4709e9f..2802793 100644 --- a/inst/doc/usecase.md +++ b/inst/doc/usecase.md @@ -51,7 +51,6 @@ You can find more explanation in FAQ [How-to-20](inst/doc/faq.md#20-use-metadata This script shows three ways to load the data with different expid - member - version combination. It is useful for climate prediction of multiple experiments. 12. [Load and plot data in rotated coordintaes](inst/doc/usecase/ex1_12_rotated_coordinates.R) - This script shows how to load and plot data in rotated coordinates using Monarch-dust simulations. -- GitLab From e577cdd952153b674d357ae7b8cad8de0567400c Mon Sep 17 00:00:00 2001 From: nperez Date: Wed, 18 Nov 2020 10:20:28 +0100 Subject: [PATCH 04/12] Fix code use case --- inst/doc/usecase.md | 2 +- inst/doc/usecase/ex1_12_rotated_coordinates.R | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/inst/doc/usecase.md b/inst/doc/usecase.md index 2802793..ac4e4ad 100644 --- a/inst/doc/usecase.md +++ b/inst/doc/usecase.md @@ -51,7 +51,7 @@ You can find more explanation in FAQ [How-to-20](inst/doc/faq.md#20-use-metadata This script shows three ways to load the data with different expid - member - version combination. It is useful for climate prediction of multiple experiments. 12. [Load and plot data in rotated coordintaes](inst/doc/usecase/ex1_12_rotated_coordinates.R) - This script shows how to load and plot data in rotated coordinates using Monarch-dust simulations. + This script shows how to load and plot data in rotated coordinates using **Monarch-dust** simulations. 2. **Execute computation (use `Compute()`)** diff --git a/inst/doc/usecase/ex1_12_rotated_coordinates.R b/inst/doc/usecase/ex1_12_rotated_coordinates.R index e3e7260..3da4b79 100644 --- a/inst/doc/usecase/ex1_12_rotated_coordinates.R +++ b/inst/doc/usecase/ex1_12_rotated_coordinates.R @@ -44,9 +44,11 @@ rlat <- attributes(data)$Variables$common$rlat rlon <- attributes(data)$Variables$common$rlon # Or check information: attributes(data)$Variables$common$lev -#attributes(data)$Variables$common$time +attributes(data)$Variables$common$time + # PLOT: +map <- data[1,1,1,1,1,,] # Time-step 1 library(sf) library(ggplot2) map <- data.frame(rlat = rep(rlat, length(rlon)), -- GitLab From 9b2c064b0c2de0a622226802aab8a36e46f3d1cd Mon Sep 17 00:00:00 2001 From: nperez Date: Tue, 24 Nov 2020 15:50:36 +0100 Subject: [PATCH 05/12] error not found files --- inst/doc/faq.md | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/inst/doc/faq.md b/inst/doc/faq.md index 947ad9f..fdbd160 100644 --- a/inst/doc/faq.md +++ b/inst/doc/faq.md @@ -25,8 +25,8 @@ This document intends to be the first reference for any doubts that you may have 19. [Get metadata when the first file does not exist](#19-get-metadata-when-the-first-file-does-not-exist) 20. [Use 'metadata_dims' to retrieve variable metadata](#20-use-metadata_dims-to-retrieve-variable-metadata) 21. [Retrieve the complete data when the dimension length varies among files](#21-retrieve-the-complete-data-when-the-dimension-length-varies-among-files) + 22. [Start() fails retrieving data](#22-start-fails-retrieving-data) - 2. **Something goes wrong...** 1. [No space left on device](#1-no-space-left-on-device) 2. [ecFlow UI remains blue and does not update status](#2-ecflow-ui-remains-blue-and-does-not-update-status) @@ -824,6 +824,19 @@ adopt the provided ones and use the first valid file to decide the rest of dimen By this means, the efficiency can be similar to `largest_dims_length = FALSE`. +### 22. Start() fails retrieving data + +If you get the following error message: + +``` +Exploring files... This will take a variable amount of time depending +* on the issued request and the performance of the file server... +Error in R_nc4_open: No such file or directory +Error in file_var_reader(NULL, file_object, NULL, var_to_read, synonims) : + Either 'file_path' or 'file_object' must be provided. +``` + +check if your path contains the label $var$ in the path. If not, try to added it as part of the path or the file name. Where $var$ is the variable to retrieve from files. # Something goes wrong... -- GitLab From f9f1a625a7d3983daf23888800d6b4125d59e6a9 Mon Sep 17 00:00:00 2001 From: nperez Date: Tue, 24 Nov 2020 16:07:44 +0100 Subject: [PATCH 06/12] add white line --- inst/doc/faq.md | 1 + 1 file changed, 1 insertion(+) diff --git a/inst/doc/faq.md b/inst/doc/faq.md index fdbd160..329fea3 100644 --- a/inst/doc/faq.md +++ b/inst/doc/faq.md @@ -27,6 +27,7 @@ This document intends to be the first reference for any doubts that you may have 21. [Retrieve the complete data when the dimension length varies among files](#21-retrieve-the-complete-data-when-the-dimension-length-varies-among-files) 22. [Start() fails retrieving data](#22-start-fails-retrieving-data) + 2. **Something goes wrong...** 1. [No space left on device](#1-no-space-left-on-device) 2. [ecFlow UI remains blue and does not update status](#2-ecflow-ui-remains-blue-and-does-not-update-status) -- GitLab From f94818372a410add2256ca270ebb27cc2c19f596 Mon Sep 17 00:00:00 2001 From: nperez Date: Thu, 26 Nov 2020 13:09:08 +0100 Subject: [PATCH 07/12] Move faq 22to section 2 --- inst/doc/faq.md | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/inst/doc/faq.md b/inst/doc/faq.md index 329fea3..24e7acb 100644 --- a/inst/doc/faq.md +++ b/inst/doc/faq.md @@ -25,7 +25,6 @@ This document intends to be the first reference for any doubts that you may have 19. [Get metadata when the first file does not exist](#19-get-metadata-when-the-first-file-does-not-exist) 20. [Use 'metadata_dims' to retrieve variable metadata](#20-use-metadata_dims-to-retrieve-variable-metadata) 21. [Retrieve the complete data when the dimension length varies among files](#21-retrieve-the-complete-data-when-the-dimension-length-varies-among-files) - 22. [Start() fails retrieving data](#22-start-fails-retrieving-data) 2. **Something goes wrong...** @@ -35,6 +34,7 @@ This document intends to be the first reference for any doubts that you may have 4. [My jobs work well in workstation and fatnodes but not on Power9 (or vice versa)](#4-my-jobs-work-well-in-workstation-and-fatnodes-but-not-on-power9-or-vice-versa) 5. [Errors related to wrong file formatting](#5-errors-related-to-wrong-file-formatting) 6. [Errors using a new cluster (setting Nord3)](#6-errors-using-a-new-cluster-setting-nord3) + 7. [Start() fails retrieving data](#7-start-fails-retrieving-data) ## 1. How to @@ -825,20 +825,6 @@ adopt the provided ones and use the first valid file to decide the rest of dimen By this means, the efficiency can be similar to `largest_dims_length = FALSE`. -### 22. Start() fails retrieving data - -If you get the following error message: - -``` -Exploring files... This will take a variable amount of time depending -* on the issued request and the performance of the file server... -Error in R_nc4_open: No such file or directory -Error in file_var_reader(NULL, file_object, NULL, var_to_read, synonims) : - Either 'file_path' or 'file_object' must be provided. -``` - -check if your path contains the label $var$ in the path. If not, try to added it as part of the path or the file name. Where $var$ is the variable to retrieve from files. - # Something goes wrong... ### 1. No space left on device @@ -969,4 +955,16 @@ cannot read workspace version 3 written by R 3.6.2; need R 3.5.0 or newer change the R version used in your workstation to one newer. +### 7. Start() fails retrieving data + +If you get the following error message: +``` +Exploring files... This will take a variable amount of time depending +* on the issued request and the performance of the file server... +Error in R_nc4_open: No such file or directory +Error in file_var_reader(NULL, file_object, NULL, var_to_read, synonims) : + Either 'file_path' or 'file_object' must be provided. +``` + +check if your path contains the label $var$ in the path. If not, try to added it as part of the path or the file name. Where $var$ is the variable to retrieve from files. -- GitLab From a4170dd8ead20cdf3b43f2c1f6fd949d1b3f8ef6 Mon Sep 17 00:00:00 2001 From: aho Date: Wed, 9 Dec 2020 17:05:49 +0100 Subject: [PATCH 08/12] Use PCICt to transfer numeric to dates --- DESCRIPTION | 3 +- NAMESPACE | 1 + R/NcDataReader.R | 32 ++++-- tests/testthat/test-Start-calendar.R | 148 +++++++++++++++++++++++++++ 4 files changed, 173 insertions(+), 11 deletions(-) create mode 100644 tests/testthat/test-Start-calendar.R diff --git a/DESCRIPTION b/DESCRIPTION index bf0ed00..f501e90 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -28,7 +28,8 @@ Imports: parallel, easyNCDF, s2dverification, - ClimProjDiags + ClimProjDiags, + PCICt Suggests: stats, utils diff --git a/NAMESPACE b/NAMESPACE index a3ad75f..ccf783c 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -16,6 +16,7 @@ export(Start) export(Step) export(indices) export(values) +import(PCICt) import(abind) import(bigmemory) import(easyNCDF) diff --git a/R/NcDataReader.R b/R/NcDataReader.R index 0dfe0b2..74df355 100644 --- a/R/NcDataReader.R +++ b/R/NcDataReader.R @@ -43,7 +43,7 @@ #' first_round_indices, synonims) #'@seealso \code{\link{NcOpener}} \code{\link{NcDimReader}} #' \code{\link{NcCloser}} \code{\link{NcVarReader}} -#'@import easyNCDF +#'@import easyNCDF PCICt #'@export NcDataReader <- function(file_path = NULL, file_object = NULL, file_selectors = NULL, inner_indices = NULL, @@ -182,32 +182,44 @@ NcDataReader <- function(file_path = NULL, file_object = NULL, x } }) + if (length(names(attr(result, 'variables'))) == 1) { var_name <- names(attr(result, 'variables')) units <- attr(result, 'variables')[[var_name]][['units']] + if (units %in% c('seconds', 'minutes', 'hours', 'days', 'weeks', 'months', 'years')) { if (units == 'seconds') { - units <- 'secs' +# units <- 'secs' } else if (units == 'minutes') { - units <- 'mins' +# units <- 'mins' + result <- result * 60 # min to sec } result[] <- paste(result[], units) + } else if (grepl(' since ', units)) { parts <- strsplit(units, ' since ')[[1]] units <- parts[1] + if (units %in% c('second', 'seconds')) { - units <- 'secs' +# units <- 'secs' } else if (units %in% c('minute', 'minutes')) { - units <- 'mins' - } else if (units == 'day') { - units <- 'days' +# units <- 'mins' + result <- result * 60 # min to sec + } else if (units %in% c('day', 'days')) { +# units <- 'days' + result <- result * 24 * 60 * 60 # day to sec } else if (units %in% c('month', 'months')) { result <- result * 30.5 - units <- 'days' + result <- result * 24 * 60 * 60 # day to sec +# units <- 'days' } - new_array <- rep(as.POSIXct(parts[2], tz = 'UTC'), length(result)) + - as.difftime(result[], units = units) + # Find the calendar + calendar <- attr(result, 'variables')$time$calendar + if (calendar == 'standard') calendar <- 'gregorian' + new_array <- PCICt::as.PCICt(result, cal = calendar, origin = parts[2])[] + new_array <- suppressWarnings(PCICt::as.POSIXct.PCICt(new_array, tz = "UTC")) + #new_array <- seq(as.POSIXct(parts[2]), # length = max(result, na.rm = TRUE) + 1, # by = units)[result[] + 1] diff --git a/tests/testthat/test-Start-calendar.R b/tests/testthat/test-Start-calendar.R new file mode 100644 index 0000000..2653920 --- /dev/null +++ b/tests/testthat/test-Start-calendar.R @@ -0,0 +1,148 @@ +context("Start() different calendar") + +test_that("1. 360_day, daily", { + + path_hadgem3 <- paste0('/esarchive/exp/CMIP6/dcppA-hindcast/hadgem3-gc31-mm/', + 'cmip6-dcppA-hindcast_i1p1/DCPP/MOHC/HadGEM3-GC31-MM/', + 'dcppA-hindcast/r1i1p1f2/day/$var$/gn/v20200101/', + '$var$_day_HadGEM3-GC31-MM_dcppA-hindcast_s$sdate$-r1i1p1f2_gn_$fyear$.nc') + + sdate <- c('2000', '2001') + fyear_hadgem3 <- indices(1) + + suppressWarnings( + data <- Start(dat = path_hadgem3, + var = 'tasmax', + sdate = sdate, + fyear = fyear_hadgem3, + fyear_depends = 'sdate', + time = indices(1:3), + lat = indices(1), lon = indices(1), + return_vars = list(lat = 'dat', lon = 'dat', time = 'sdate'), + retrieve = FALSE) + ) + +expect_equal( + dim(attr(data, 'Variables')$common$time), + c(sdate = 2, time = 3) +) + time <- c(as.POSIXct('2000-11-01 12:00:00', tz = 'UTC'), + as.POSIXct('2000-11-02 12:00:00', tz = 'UTC'), + as.POSIXct('2000-11-03 12:00:00', tz = 'UTC')) + attr(time, "tzone") <- "UTC" +expect_equal( + attr(data, 'Variables')$common$time[1, ], + time +) + time <- c( + as.POSIXct('2001-11-01 12:00:00', tz = 'UTC'), + as.POSIXct('2001-11-02 12:00:00', tz = 'UTC'), + as.POSIXct('2001-11-03 12:00:00', tz = 'UTC')) + attr(time, "tzone") <- "UTC" +expect_equal( + attr(data, 'Variables')$common$time[2, ], + time +) + + +}) + +test_that("2. 365_day, daily", { +path_bcc_csm2 <- '/esarchive/exp/CMIP6/dcppA-hindcast/bcc-csm2-mr/cmip6-dcppA-hindcast_i1p1/DCPP/BCC/BCC-CSM2-MR/dcppA-hindcast/r1i1p1f1/day/$var$/gn/v20200408/$var$_day_BCC-CSM2-MR_dcppA-hindcast_s$sdate$-r1i1p1f1_gn_19800101-19891231.nc' + + data <- Start(dat = path_bcc_csm2, + var = 'tasmax', + sdate = '1980', + time = indices(1:3), + lat = indices(1), + lon = indices(1), + return_vars = list(lat = 'dat', lon = 'dat', time = 'sdate'), + retrieve = FALSE) + +expect_equal( + dim(attr(data, 'Variables')$common$time), + c(sdate = 1, time = 3) +) + time <- c(as.POSIXct('1980-01-01 12:00:00', tz = 'UTC'), + as.POSIXct('1980-01-02 12:00:00', tz = 'UTC'), + as.POSIXct('1980-01-03 12:00:00', tz = 'UTC')) + attr(time, "tzone") <- "UTC" +expect_equal( + attr(data, 'Variables')$common$time[1, ], + time +) + + +}) + + +test_that("3. gregorian/standard, daily", { + + path_mpi_esm <- paste0('/esarchive/exp/CMIP6/dcppA-hindcast/mpi-esm1-2-hr/', + 'cmip6-dcppA-hindcast_i1p1/DCPP/MPI-M/MPI-ESM1-2-HR/', + 'dcppA-hindcast/r1i1p1f1/day/$var$/gn/v20200101/', + '$var$_day_MPI-ESM1-2-HR_dcppA-hindcast_s$sdate$-r1i1p1f1_gn_$fyear$.nc') + + var <- 'tasmax' + sdate <- '2000' + fyear_mpi_esm <- paste0(sdate, '1101-', as.numeric(sdate) + 10, '1231') + + data <- Start(dat = path_mpi_esm, + var = var, + sdate = sdate, + fyear = fyear_mpi_esm, + fyear_depends = 'sdate', + time = indices(1:3), + lat = indices(1), + lon = indices(1), + return_vars = list(lat = 'dat', lon = 'dat', time = 'sdate'), + retrieve = FALSE) + +expect_equal( + dim(attr(data, 'Variables')$common$time), + c(sdate = 1, time = 3) +) + time <- c(as.POSIXct('2000-11-01 12:00:00', tz = 'UTC'), + as.POSIXct('2000-11-02 12:00:00', tz = 'UTC'), + as.POSIXct('2000-11-03 12:00:00', tz = 'UTC')) + attr(time, "tzone") <- "UTC" +expect_equal( + attr(data, 'Variables')$common$time[1, ], + time +) + + +}) + +test_that("4. gregorian/standard, monthly", { + + path_mpi_esm <- paste0('/esarchive/exp/CMIP6/dcppA-hindcast/mpi-esm1-2-hr/', + 'cmip6-dcppA-hindcast_i1p1/DCPP/MPI-M/MPI-ESM1-2-HR/', + 'dcppA-hindcast/r1i1p1f1/Amon/$var$/gn/v20200320/', + '$var$_Amon_MPI-ESM1-2-HR_dcppA-hindcast_s$sdate$-r1i1p1f1_gn_200011-201012.nc') + sdate <- '2000' + fyear_mpi_esm <- paste0(sdate, '1101-', as.numeric(sdate) + 10, '1231') + + data <- Start(dat = path_mpi_esm, + var = 'tasmax', + sdate = '2000', + time = indices(1:3), + lat = indices(1), + lon = indices(1), + return_vars = list(lat = 'dat', lon = 'dat', time = 'sdate'), + retrieve = FALSE) + +expect_equal( + dim(attr(data, 'Variables')$common$time), + c(sdate = 1, time = 3) +) + time <- c(as.POSIXct('2000-11-16 00:00:00', tz = 'UTC'), + as.POSIXct('2000-12-16 12:00:00', tz = 'UTC'), + as.POSIXct('2001-01-16 12:00:00', tz = 'UTC')) + attr(time, "tzone") <- "UTC" +expect_equal( + attr(data, 'Variables')$common$time[1, ], + time +) + +}) -- GitLab From ee58fa412eda9bfb4d6afc63cef442cdc35e8c4b Mon Sep 17 00:00:00 2001 From: aho Date: Fri, 11 Dec 2020 08:56:00 +0100 Subject: [PATCH 09/12] Correct exp time attribute to UTC --- inst/doc/usecase/ex1_2_exp_obs_attr.R | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/inst/doc/usecase/ex1_2_exp_obs_attr.R b/inst/doc/usecase/ex1_2_exp_obs_attr.R index acff7c9..2e4b5da 100644 --- a/inst/doc/usecase/ex1_2_exp_obs_attr.R +++ b/inst/doc/usecase/ex1_2_exp_obs_attr.R @@ -89,13 +89,12 @@ print(attr(obs, 'Dimensions')) ##-----time----- print(attr(exp, 'Variables')$common$time) -# [1] "2005-01-16 13:14:44 CET" "2006-01-16 13:14:44 CET" -# [3] "2007-01-16 13:14:44 CET" "2008-01-16 13:14:44 CET" -# [5] "2005-02-15 01:14:44 CET" "2006-02-15 01:14:44 CET" -# [7] "2007-02-15 01:14:44 CET" "2008-02-15 13:14:44 CET" -# [9] "2005-03-16 13:14:44 CET" "2006-03-16 13:14:44 CET" -#[11] "2007-03-16 13:14:44 CET" "2008-03-16 13:14:44 CET" - +# [1] "2005-01-16 12:00:00 UTC" "2006-01-16 12:00:00 UTC" +# [3] "2007-01-16 12:00:00 UTC" "2008-01-16 12:00:00 UTC" +# [5] "2005-02-15 00:00:00 UTC" "2006-02-15 00:00:00 UTC" +# [7] "2007-02-15 00:00:00 UTC" "2008-02-15 12:00:00 UTC" +# [9] "2005-03-16 12:00:00 UTC" "2006-03-16 12:00:00 UTC" +#[11] "2007-03-16 12:00:00 UTC" "2008-03-16 12:00:00 UTC" print(attr(obs, 'Variables')$common$time) # [1] "2005-01-31 18:00:00 UTC" "2006-01-31 18:00:00 UTC" # [3] "2007-01-31 18:00:00 UTC" "2008-01-31 18:00:00 UTC" -- GitLab From 77ea7adfcc48370a572e4c0f71136653a46f6d6f Mon Sep 17 00:00:00 2001 From: aho Date: Fri, 11 Dec 2020 08:56:20 +0100 Subject: [PATCH 10/12] Add time attribute check --- inst/doc/usecase/ex1_3_attr_loadin.R | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/inst/doc/usecase/ex1_3_attr_loadin.R b/inst/doc/usecase/ex1_3_attr_loadin.R index a918e16..d514c30 100644 --- a/inst/doc/usecase/ex1_3_attr_loadin.R +++ b/inst/doc/usecase/ex1_3_attr_loadin.R @@ -104,6 +104,30 @@ erai[1, 1, 2, 31, 1, 1] # 1st March also, since June only has 30 days # The experimental and observational data are comparable with same structure. +#---------Check time attributes-------- +dim(attr(erai, 'Variables')$common$time) +#file_date time +# 8 31 +attr(erai, 'Variables')$common$time[1, ] +# [1] "1994-05-01 UTC" "1994-05-02 UTC" "1994-05-03 UTC" "1994-05-04 UTC" +# [5] "1994-05-05 UTC" "1994-05-06 UTC" "1994-05-07 UTC" "1994-05-08 UTC" +# [9] "1994-05-09 UTC" "1994-05-10 UTC" "1994-05-11 UTC" "1994-05-12 UTC" +#[13] "1994-05-13 UTC" "1994-05-14 UTC" "1994-05-15 UTC" "1994-05-16 UTC" +#[17] "1994-05-17 UTC" "1994-05-18 UTC" "1994-05-19 UTC" "1994-05-20 UTC" +#[21] "1994-05-21 UTC" "1994-05-22 UTC" "1994-05-23 UTC" "1994-05-24 UTC" +#[25] "1994-05-25 UTC" "1994-05-26 UTC" "1994-05-27 UTC" "1994-05-28 UTC" +#[29] "1994-05-29 UTC" "1994-05-30 UTC" "1994-05-31 UTC" +attr(erai, 'Variables')$common$time[2, ] +# [1] "1994-06-01 UTC" "1994-06-02 UTC" "1994-06-03 UTC" "1994-06-04 UTC" +# [5] "1994-06-05 UTC" "1994-06-06 UTC" "1994-06-07 UTC" "1994-06-08 UTC" +# [9] "1994-06-09 UTC" "1994-06-10 UTC" "1994-06-11 UTC" "1994-06-12 UTC" +#[13] "1994-06-13 UTC" "1994-06-14 UTC" "1994-06-15 UTC" "1994-06-16 UTC" +#[17] "1994-06-17 UTC" "1994-06-18 UTC" "1994-06-19 UTC" "1994-06-20 UTC" +#[21] "1994-06-21 UTC" "1994-06-22 UTC" "1994-06-23 UTC" "1994-06-24 UTC" +#[25] "1994-06-25 UTC" "1994-06-26 UTC" "1994-06-27 UTC" "1994-06-28 UTC" +#[29] "1994-06-29 UTC" "1994-06-30 UTC" NA + + # //////////////////"BONUS"////////////////////// # Here is something more to show the usage of parameter 'merge_across_dims_narm'. -- GitLab From 4428c6552d8f4cb2e426ad8de8676ee81ff2ee84 Mon Sep 17 00:00:00 2001 From: aho Date: Fri, 11 Dec 2020 09:00:40 +0100 Subject: [PATCH 11/12] Include 'hours' to PCICt time transfer --- R/NcDataReader.R | 2 ++ tests/testthat/test-Start-calendar.R | 32 ++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/R/NcDataReader.R b/R/NcDataReader.R index 74df355..222d11d 100644 --- a/R/NcDataReader.R +++ b/R/NcDataReader.R @@ -205,6 +205,8 @@ NcDataReader <- function(file_path = NULL, file_object = NULL, } else if (units %in% c('minute', 'minutes')) { # units <- 'mins' result <- result * 60 # min to sec + } else if (units %in% c('hour', 'hours')) { + result <- result * 60 * 60 # hour to sec } else if (units %in% c('day', 'days')) { # units <- 'days' result <- result * 24 * 60 * 60 # day to sec diff --git a/tests/testthat/test-Start-calendar.R b/tests/testthat/test-Start-calendar.R index 2653920..19ac0df 100644 --- a/tests/testthat/test-Start-calendar.R +++ b/tests/testthat/test-Start-calendar.R @@ -146,3 +146,35 @@ expect_equal( ) }) + +test_that("4. gregorian/standard, 6hrly", { + repos_obs <- paste0('/esarchive/recon/ecmwf/erainterim/6hourly/', + '$var$/$var$_199405.nc') + date <- paste0('1994-05-', sprintf('%02d', 1:31), ' 00:00:00') + date <- as.POSIXct(date, tz = 'UTC') +# attr(date, 'tzone') <- 'UTC' + data <- Start(dat = repos_obs, + var = 'tas', + time = date, + latitude = indices(1), + longitude = indices(1), + return_vars = list(latitude = NULL, + longitude = NULL, + time = NULL), + retrieve = TRUE) + +expect_equal( + as.vector(attr(data, 'Variables')$common$time[1:31]), + as.vector(date) +) +expect_equal( + as.vector(data)[1:5], + c(255.0120, 256.8095, 254.3654, 254.6059, 257.0551), + tolerance = 0.0001 +) +expect_equal( + as.vector(data)[length(data)], + c(268.2216), + tolerance = 0.0001 +) +}) -- GitLab From e75706bc06fb7e993f2d26118fc33382bbd8b8b0 Mon Sep 17 00:00:00 2001 From: nperez Date: Thu, 21 Jan 2021 18:18:05 +0100 Subject: [PATCH 12/12] fixing not found .KnownLonNames issue 84 --- DESCRIPTION | 2 +- R/CDORemapper.R | 4 ++-- R/Start.R | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index f501e90..c091bc3 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: startR Title: Automatically Retrieve Multidimensional Distributed Data Sets -Version: 2.1.0 +Version: 2.1.0-1 Authors@R: c( person("BSC-CNS", role = c("aut", "cph")), person("Nicolau", "Manubens", , "nicolau.manubens@bsc.es", role = c("aut")), diff --git a/R/CDORemapper.R b/R/CDORemapper.R index 815b92a..867ee26 100644 --- a/R/CDORemapper.R +++ b/R/CDORemapper.R @@ -54,8 +54,8 @@ #'@export CDORemapper <- function(data_array, variables, file_selectors = NULL, ...) { file_dims <- names(file_selectors) - known_lon_names <- .KnownLonNames() - known_lat_names <- .KnownLatNames() + known_lon_names <- startR:::.KnownLonNames() + known_lat_names <- startR:::.KnownLatNames() if (!any(known_lon_names %in% names(variables)) || !any(known_lat_names %in% names(variables))) { stop("The longitude and latitude variables must be requested in ", diff --git a/R/Start.R b/R/Start.R index 39e1e6c..25b0e2d 100644 --- a/R/Start.R +++ b/R/Start.R @@ -3179,7 +3179,7 @@ Start <- function(..., # dim = indices/selectors, # Before changing crop, first we need to find the name of longitude. # NOTE: The potential bug here (also the bug for CDORemapper): the lon name # is limited (only the ones listed in .KnownLonNames() are available. - known_lon_names <- .KnownLonNames() + known_lon_names <- startR:::.KnownLonNames() lon_name <- names(subset_vars_to_transform)[which(names(subset_vars_to_transform) %in% known_lon_names)[1]] # NOTE: The cases not considered: (1) if lon reorder(decreasing = T) -- GitLab