R/list_CMIP5Files.R

Defines functions list_CMIP5Files

Documented in list_CMIP5Files

#' list CMIP5 files
#' 
#' @param dir_root root directory of CMIP5 files
#' @param ignore.Misc boolean, whether ignore `Misc` files
#' 
#' @examples 
#' \dontrun{
#' files_tas  <- list_CMIP5Files("J:/CMIP5")
#' files_huss <- list_CMIP5Files("O:/CMIP5/CMIP5_huss")
#' }
#' @keywords internal
#' @export
list_CMIP5Files <- function(dir_root, scenarios = c("historical", "GHG", "Nat", "piControl", "RCP"), 
    realization = "r1i1p1", ignore.Misc = TRUE)
{
    # print(dir_root)
    scenarios %<>% paste(collapse = "$|")

    dirs  <- list.dirs(dir_root, full.names = T)[-1] %>% .[grep("his|RCP|rcp|pi", .)] %>% sort()
    names = str_split(basename(dirs), "_") %>% map_chr(1)
    dirs %<>% set_names(names)
    # browser()
    dirs %<>% {.[grep(scenarios, names)]}

    if (ignore.Misc) {
        I_ignore <- grep("Misc|bin", dirs)
        if (!is_empty(I_ignore)) dirs <- dirs[-I_ignore]
    }
    
    files <- map(dirs, function(indir) {
        ans = dir(indir, full.names = T, pattern = "*.nc$") # rm piControl
        ans %>% .[grep(realization, .)]
    })
    files
}


.scenarios <- c('historical', 'historicalAA', 'historicalANT', 'historicalGHG', 'historicalNat', 
    'piControl', 'RCP26', 'RCP45', 'RCP60', 'RCP85')[-(2:3)]
.scenarios_label <- c('ALL', 'AA', 'ANT', 'GHG', 'Nat', 
    'piControl', 'RCP2.6', 'RCP4.5', 'RCP6.0', 'RCP8.5')[-(2:3)]

realization_summary <- function(info, info_pi, rm.na_PI = TRUE) {
    d <- map(info, ~.[, .N, .(model)]) %>% {
        res <- melt_list(., "scenario")
        res$scenario %<>% factor(.scenarios, .scenarios_label)
        res
    } 
    
    d <- rbind(d[scenario != "piControl"], 
               cbind(info_pi, scenario = "piControl"))
    d %<>% dcast(model~scenario, value.var = "N")
    if (rm.na_PI) d <- d[!is.na(piControl), ]
    # d <- d[!is.na(ALL), ] # ALL not NA
    
    num_model <- d[, -1] %>% {!is.na(.)} %>% colSums2(na.rm = 2)
    num_ensemble <- d[, -1] %>% as.matrix() %>% colSums2(na.rm = 2) 

    d_num <- rbind(num_ensemble, num_model) %>% as.data.table() %>% set_colnames(colnames(d)[-1]) %>% 
        cbind(model = c("Total realizations", "Total models"), .)
    d <- rbind(d, d_num)
    d
}
kongdd/CMIP5tools documentation built on Dec. 17, 2020, 11:03 a.m.