fixing quickeffect bug

This commit is contained in:
Roland Hollós 2020-05-24 09:01:14 +02:00
parent 3c7f47dd19
commit e6cd1d5e57
3 changed files with 46 additions and 18 deletions

View File

@ -109,15 +109,21 @@ calibMuso <- function(settings=NULL, calibrationPar=NULL,
# { # {
toModif <- sapply(toModif, function (x){ toModif <- sapply(toModif, function (x){
paste0(tools::file_path_sans_ext(basename(x)),"-tmp.",tools::file_ext(x)) paste0(tools::file_path_sans_ext(basename(x)),
"-tmp.",
tools::file_ext(x))
}) })
# } # }
##change the epc file if and only if there are given parameters ##change the epc file if and only if there are given parameters
if(!is.null(parameters)){ if(!is.null(parameters)){
changemulline(filePaths=c(epc[2],iniInput[2]), calibrationPar = calibrationPar, changemulline(filePaths = c(epc[2], iniInput[2]),
contents = parameters, fileOut=toModif, fileToChange=fileToChange, modifyOriginal=modifyOriginal) calibrationPar = calibrationPar,
contents = parameters,
fileOut = toModif,
fileToChange = fileToChange,
modifyOriginal = modifyOriginal)
} }
@ -150,7 +156,9 @@ calibMuso <- function(settings=NULL, calibrationPar=NULL,
# sapply(c(iniInput,epc),) # sapply(c(iniInput,epc),)
# #
# } # }
if(modifyOriginal){
iniInput[2] <- toModif[2]
}
if(!skipSpinup) { if(!skipSpinup) {
@ -250,7 +258,6 @@ calibMuso <- function(settings=NULL, calibrationPar=NULL,
setwd((whereAmI)) setwd((whereAmI))
stop("Cannot read binary output, please check if the output type is set 2 in the ini files!")})) stop("Cannot read binary output, please check if the output type is set 2 in the ini files!")}))
) )
if(keepBinary){ if(keepBinary){
possibleNames <- tryCatch(getOutFiles(outputLoc = outputLoc,outputNames = outputNames), possibleNames <- tryCatch(getOutFiles(outputLoc = outputLoc,outputNames = outputNames),
error=function (e){ error=function (e){

View File

@ -173,13 +173,13 @@ optiMuso <- function(measuredData, parameters = NULL, startDate = NULL,
preservedCalib<- read.csv("preservedCalib.csv") preservedCalib<- read.csv("preservedCalib.csv")
p<-list() p<-list()
preservedCalib <- preservedCalib[-1,] preservedCalib <- preservedCalib[-1,]
preservedCalib <- preservedCalib[!is.na(preservedCalib$likelihood),]
dontInclude <-c((ncol(preservedCalib)-1),ncol(preservedCalib)) dontInclude <-c((ncol(preservedCalib)-1),ncol(preservedCalib))
# for(i in seq_along(colnames(preservedCalib)[-dontInclude])){ # for(i in seq_along(colnames(preservedCalib)[-dontInclude])){
# p[[i]] <- ggplot(as.data.frame(preservedCalib),aes_string(colnames(preservedCalib)[i],"likelihood")) + # p[[i]] <- ggplot(as.data.frame(preservedCalib),aes_string(colnames(preservedCalib)[i],"likelihood")) +
# geom_point(shape='.',size=1,alpha=0.8) # geom_point(shape='.',size=1,alpha=0.8)
# } # }
unfilteredLikelihood <- preservedCalib$likelihood unfilteredLikelihood <- preservedCalib$likelihood
preservedCalib <- preservedCalib[preservedCalib$likelihood>quantile(preservedCalib$likelihood,0.95),] preservedCalib <- preservedCalib[preservedCalib$likelihood>quantile(preservedCalib$likelihood,0.95),]
optRanges <-t(apply(preservedCalib,2,function(x) quantile(x,c(0.05,0.5,0.95)))) optRanges <-t(apply(preservedCalib,2,function(x) quantile(x,c(0.05,0.5,0.95))))
@ -208,6 +208,8 @@ dev.off()
# file.rename(tempEpc, "optimizedEpc.epc") # file.rename(tempEpc, "optimizedEpc.epc")
# return(preservedCalib[maxLikelihoodPlace,]) # return(preservedCalib[maxLikelihoodPlace,])
write.csv(optRanges,"optRanges.csv") write.csv(optRanges,"optRanges.csv")
# is.num <- sapply(head(optRanges,-2), is.numeric)
# optRanges[is.num] <- lapply(optRanges[is.num], round, 4)
return(head(optRanges,n=-2)) return(head(optRanges,n=-2))
} }

View File

@ -15,7 +15,7 @@
#' @importFrom tidyr separate #' @importFrom tidyr separate
#' @export #' @export
musoQuickEffect <- function(settings = NULL, calibrationPar = NULL, startVal, endVal, nSteps = 1, fileToChange="epc",modifyOriginal=TRUE, outVar, parName = "parVal"){ musoQuickEffect <- function(settings = setupMuso(), calibrationPar = NULL, startVal, endVal, nSteps = 1, fileToChange="epc",modifyOriginal=TRUE, outVar, parName = "parVal", yearNum=1, year=(settings$startYear + yearNum -1)){
if(is.character(outVar)){ if(is.character(outVar)){
varNames <- as.data.frame(musoMappingFind(outVar)) varNames <- as.data.frame(musoMappingFind(outVar))
@ -33,9 +33,6 @@ musoQuickEffect <- function(settings = NULL, calibrationPar = NULL, startVal, e
outVarIndex<-outVar outVarIndex<-outVar
} }
if(is.null(settings)){
settings <- setupMuso()
}
if(is.null(calibrationPar)){ if(is.null(calibrationPar)){
calibrationPar <- settings$calibrationPar calibrationPar <- settings$calibrationPar
} }
@ -43,21 +40,43 @@ musoQuickEffect <- function(settings = NULL, calibrationPar = NULL, startVal, e
parVals <- seq(startVal, endVal, length = (nSteps + 1)) parVals <- seq(startVal, endVal, length = (nSteps + 1))
parVals <- dynRound(startVal, endVal, seqLen = (nSteps + 1)) parVals <- dynRound(startVal, endVal, seqLen = (nSteps + 1))
a <- do.call(rbind,lapply(parVals, function(parVal){ a <- do.call(rbind,lapply(parVals, function(parVal){
calResult <- tryCatch(calibMuso(settings = settings,calibrationPar = calibrationPar,modifyOriginal=modifyOriginal, parameters = parVal, outVars = outVarIndex, silent = TRUE,fileToChange = fileToChange), error = function(e){NA}) calResult <- tryCatch(calibMuso(settings = settings,calibrationPar = calibrationPar,
if(all(is.na(calResult))){ modifyOriginal = modifyOriginal,
parameters = parVal,
outVars = outVarIndex,
silent = TRUE,
fileToChange = fileToChange), error = function(e){NULL})
if(is.null(calResult)){
b <- cbind(rep(NA,365),parVal) b <- cbind(rep(NA,365),parVal)
rownames(b) <- tail(musoDate(startYear = settings$startYear, numYears = settings$numYears),365) rownames(b) <- musoDate(startYear = year, numYears = 1)
colnames(b)[1] <- varNames colnames(b)[1] <- varNames
return(b) return(b)
} else { } else {
return(cbind(tail(calResult,365), parVal)) m <- as.data.frame(calResult[musoDate(startYear = year, numYears = 1),])
colnames(m) <- colnames(calResult)
return(cbind(m, parVal))
} }
})) }))
a %<>% a %<>%
tbl_df %>% tbl_df %>%
mutate(date=as.Date(rownames(a),"%d.%m.%Y")) %>% mutate(date=as.Date(rownames(a),"%d.%m.%Y")) %>%
select(date,as.character(varNames),parVal) select(date,as.character(varNames),parVal)
print(suppressWarnings(ggplot(data = a, aes_string(x= "date", y= varNames))+geom_line(aes(alpha = factor(parVal))) + labs(y=varNames, alpha = parName) + scale_alpha_discrete(range=c(0.25,1)))) print(suppressWarnings(ggplot(data = a, aes_string(x= "date", y= varNames))+geom_line(aes(alpha = factor(parVal))) + labs(y=varNames, alpha = parName) + scale_alpha_discrete(range=c(0.25,1))))
} }
# calma <- calibMuso(settings = settings,calibrationPar = calibrationPar,
# modifyOriginal = modifyOriginal,
# parameters = parVal,
# outVars = outVarIndex,
# silent = TRUE,
# fileToChange = fileToChange)
# plot(calma[,1])
# calma <- calibMuso(settings = settings,calibrationPar = calibrationPar,
# modifyOriginal = modifyOriginal,
# parameters = parVal,
# silent = TRUE,
# fileToChange = fileToChange)
# calm <- calibMuso(calibrationPar=calibrationPar,parameters=parVal,modifyOriginal=TRUE)
# plot(x=as.Date(musoDate(2015,numYears=1),"%d.%m.%Y"),y=calm[musoDate(2015,numYears=1),"daily_gpp"],type="l")
# calibrationPar
# parVal