ghdc/functions/Configure.R
2024-10-23 16:30:58 +08:00

185 lines
6.4 KiB
R

#' ===== configure =====================
#' configure function, generate the CV
#'
configure <- function(CV, theTask){
caller = as.character( deparse(sys.call()) )
writelog(msg=caller, caller = caller)
x.json = readJSON(theTask)
# ===== dirs =====================
keyid = paste(c(
# basename(dirname(theTask)),
format(file.info(theTask)$atime, '%Y%m%d'),
x.json$email,
x.json$project_name),
collapse = '_')
keyid_email = paste(c(
# basename(dirname(theTask)),
format(file.info(theTask)$atime, '%Y%m%d'),
x.json$email),
collapse = '_')
dir.out = file.path(CV$serv$DIR.WORKING, 'rProcessing')
dir.prj = file.path(dir.out, keyid)
## ===== BACK UP FILES. =====================
CV$dirs = list(
etv = file.path(dir.prj, 'ETV'),
model = file.path(dir.prj, 'Modeling'),
copyto = file.path(dir.prj),
userdata = file.path(dir.prj, 'UserData'),
download = normalizePath( CV$serv$DIR.ZIPOUT ),
deploy = normalizePath( file.path('./Deploy', x.json$model)),
proc = dir.out,
prj = dir.prj,
fig = file.path(dir.prj, 'ETV', 'Figure'),
pcs = file.path(dir.prj, 'ETV','PCS'),
tsd = file.path(dir.prj, 'ETV','TSD'),
# datagcs = file.path(dir.prj, 'ETV','GCS'),
taskin = theTask,
temp = file.path(CV$serv$DIR.WORKING, 'rTemp', keyid),
log = file.path(CV$serv$DIR.WORKING, 'rlog'),
bak = file.path(CV$serv$DIR.WORKING, 'backup', 'data')
)
file.copy(from = theTask, to=CV$dirs$bak, recursive = TRUE)
if(file.exists(CV$dirs$userdata)){ unlink(CV$dirs$userdata, recursive = FALSE, force = TRUE) }
tmp = lapply(CV$dirs, dir.create, showWarnings = FALSE, recursive = TRUE)
CV$json = x.json
CV$keyid = keyid
CV$task.log = file.path(dir.prj, 'task_log.txt')
write('', file = CV$task.log)
# ETV, that for data request only on GHDC
CV$etv=list(
# GCS
wbd.gcs=file.path(CV$dirs$etv, 'wbd.shp'),
buf.gcs=file.path(CV$dirs$etv, 'buf.shp'),
stm.gcs=file.path(CV$dirs$etv, 'stm.shp'),
# PCS
wbd.pcs=file.path(CV$dirs$pcs, 'wbd.shp'),
buf.pcs=file.path(CV$dirs$pcs, 'buf.shp'),
stm.pcs=file.path(CV$dirs$pcs, 'stm.shp'),
# Water Delineation
stm_dem=file.path(CV$dirs$etv, 'stm_dem.shp'),
wbd_dem=file.path(CV$dirs$etv, 'wbd_dem.shp'),
outlets = file.path(CV$dirs$etv, 'outlets.shp'),
wbd0='',
dem=file.path(CV$dirs$etv, 'dem.tif'),
soil = file.path(CV$dirs$etv, 'soil.tif'),
soil.att = file.path(CV$dirs$etv, 'soil.csv'),
geol = file.path(CV$dirs$etv, 'geol.tif'),
geol.att = file.path(CV$dirs$etv, 'geol.csv'),
landuse = file.path(CV$dirs$etv, 'landuse.tif'),
landuse.att = file.path(CV$dirs$etv, 'landuse.csv'),
landuse.lai = file.path(CV$dirs$etv, 'lai.csv'),
# meltfactor = file.path(CV$dirs$etv, 'meltfactor.csv'),
ldas = file.path(CV$dirs$etv, 'ldas.tif'),
ldas.att = file.path(CV$dirs$etv, 'ldas.csv'),
geol_depth = file.path(CV$dirs$etv, 'geol_depth.tif'),
dir.tsd = file.path(CV$dirs$tsd)
)
ls.soil = list(
hwsd = file.path(CV$serv$PATH2SD, 'Soil/HWSD/HWSD_RASTER/hwsd.bil'),
soilgrid = file.path(CV$serv$PATH2SD, '???'),
att = list(
hwsd = file.path(CV$serv$PATH2SD, 'Soil/HWSD/HWSD_RASTER/hwsd.dbf'),
soilgrid = file.path(CV$serv$PATH2SD, '???')
)
)
ls.geol = list(
hwsd = file.path(CV$serv$PATH2SD, 'Soil/HWSD/HWSD_RASTER/hwsd.bil'),
soilgrid = file.path(CV$serv$PATH2SD, '???'),
att = list(
hwsd = file.path(CV$serv$PATH2SD, 'Soil/HWSD/HWSD_RASTER/hwsd.dbf'),
soilgrid = file.path(CV$serv$PATH2SD, '???')
)
)
ls.landuse = list(
'mglc' = file.path(CV$serv$PATH2SD, 'Landuse/USGS_LCI/LCType.tif'),
att = list(
mglc = file.path(CV$serv$PATH2SD, 'Landuse/USGS_LCI/attributes.csv')
)
)
ls.dem = list(
aster=NULL,
merit=NULL,
srtm=NULL
)
ls.ldas = list(
gldas = file.path(CV$serv$PATH2FD, 'GESDISC/data/GLDAS/GLDAS_NOAH025_3H.2.1.tif'),
nldas = file.path(CV$serv$PATH2FD, 'GESDISC/data/NLDAS/NLDAS_FORA0125_H.002.tif'),
cmfd = file.path(CV$serv$PATH2FD, 'CMFD/CMFD_grid.tif'),
fldas = file.path(CV$serv$PATH2FD, 'CMFD/Data_forcing_03hr_010deg'), # ????
cldas = file.path(CV$serv$PATH2FD, 'CMFD/Data_forcing_03hr_010deg'), # ????
att=list(
gldas = file.path(CV$serv$PATH2FD, 'GESDISC/data/GLDAS/GLDAS_NOAH025_3H.2.1.csv'),
nldas = file.path(CV$serv$PATH2FD, 'GESDISC/data/NLDAS/NLDAS_FORA0125_H.002.csv'),
cmfd = file.path(CV$serv$PATH2FD, 'CMFD/CMFD_grid.csv'),
fldas = file.path(CV$serv$PATH2FD, 'CMFD/Data_forcing_03hr_010deg'), # ????
cldas = file.path(CV$serv$PATH2FD, 'CMFD/Data_forcing_03hr_010deg') # ????
),
dir=list(
gldas = file.path(CV$serv$PATH2FD, 'GLDAS_NOAH025_3H.2.1/RDS'),
nldas = file.path(CV$serv$PATH2FD, 'NLDAS_FORA0125_H/RDS'),
cmfd = file.path(CV$serv$PATH2FD, 'CMFD/CMFD_RDS'),
fldas = file.path(CV$serv$PATH2FD, 'CMFD/Data_forcing_03hr_010deg'), # ????
cldas = file.path(CV$serv$PATH2FD, 'CMFD/Data_forcing_03hr_010deg') # ????
)
)
# ===== files, Original data =====================
CV$files = list(
'zipout' = file.path(CV$serv$DIR.ZIPOUT, paste0(keyid, '.zip')),
# 'link_zip' = paste0(CV$serv$LINK.DL, paste0(keyid, '.zip')),
'link_zip' = paste0(CV$serv$LINK.DL, paste0(keyid)),
# 'email' = file.path(CV$serv$DIR.EMAIL, paste0(keyid, '.md')),
'email' = file.path(CV$serv$DIR.EMAIL, paste0(keyid_email, '.md')),
'dem' = NULL,
'soil' = ls.soil[[CV$json$soil]],
'soil.att' = ls.soil$att[[CV$json$soil]],
'geol' = ls.geol[[CV$json$geol]],
'geol.att' = ls.geol$att[[CV$json$geol]],
'landuse' = ls.landuse[[CV$json$landuse]],
'landuse.att' = ls.landuse$att[[CV$json$landuse]],
'ldas' = ls.ldas[[tolower(x.json$meteorological_data)]],
'ldas.att' = ls.ldas$att[[tolower(x.json$meteorological_data)]],
'ldas.dir' = ls.ldas$dir[[tolower(x.json$meteorological_data)]]
)
CV$deploy = list(
'config' = file.path(CV$dirs$model, 'deployConfig.txt'),
crs.gcs = CV$para$gcs,
crs.pcs = CV$para$pcs,
ldas.att = CV$etv$ldas.att
)
# copy file to
writelog(msg=paste('Copy model/citation code ... '), caller = caller)
file.copy(from = 'StaticFiles/', to= CV$dirs$copyto, recursive = TRUE)
writemessage('Task is configured. ', caller = caller, CV$task.log)
writelog(paste0('Finished'), caller=caller)
return(CV)
}
# CV=configure(CV, theTask)