## ----global_options, include=FALSE--------------------------------------------
knitr::opts_chunk$set(fig.width=5, fig.height=5, warning=FALSE, cache = F)

## ---- echo = F, message = F---------------------------------------------------
set.seed(123)

## ---- eval = F----------------------------------------------------------------
#  runMyModel(par)

## ---- eval = F----------------------------------------------------------------
#  dyn.load(model)
#  
#  runMyModel(par){
#    out = # model call here
#    # process out
#    return(out)
#  }

## ---- eval = F----------------------------------------------------------------
#  runMyModel(par){
#  
#    # Create here a string with what you would write to call the model from the command line
#    systemCall <- paste("model.exe", par[1], par[2])
#  
#    out = system(systemCall,  intern = TRUE) # intern indicates whether to capture the output of the command as an R character vector
#  
#    # write here to convert out in the apprpriate R classes
#  
#  }

## ---- eval = F----------------------------------------------------------------
#  runMyModel(par, returnData = NULL){
#  
#    writeParameters(par)
#  
#    system("Model.exe")
#  
#    if(! is.null(returnData)) return(readData(returnData)) # The readData function will be defined later
#  
#  }
#  
#  writeParameters(par){
#  
#    # e.g.
#    # read template parameter fil
#    # replace strings in template file
#    # write parameter file
#  }

## ---- eval = F----------------------------------------------------------------
#  setUpModel <- function(parameterTemplate, site, localConditions){
#  
#    # create the runModel, readData functions (see later) here
#  
#    return(list(runModel, readData))
#  
#  }

## ---- eval = F----------------------------------------------------------------
#  getData(type = X){
#  
#    read.csv(xxx)
#  
#    # do some transformation
#  
#    # return data in desidered format
#  }

## ---- eval = F----------------------------------------------------------------
#  par = c(1,2,3,4 ..)
#  
#  runMyModel(par)
#  
#  output <- getData(type = DesiredType)
#  
#  plot(output)

## -----------------------------------------------------------------------------
mymodel<-function(x){
  output<-0.2*x+0.1^x
  return(output)
}

## ---- eval = F----------------------------------------------------------------
#  
#  library(parallel)
#  cl <- makeCluster(2)
#  
#  runParallel<- function(parList){
#    parSapply(cl, parList, mymodel)
#  }
#  
#  runParallel(c(1,2))

## ---- eval = F----------------------------------------------------------------
#  library(BayesianTools)
#  parModel <- generateParallelExecuter(mymodel)

## -----------------------------------------------------------------------------
library(BayesianTools)

ll <- generateTestDensityMultiNormal(sigma = "no correlation")
bayesianSetup <- createBayesianSetup(likelihood = ll, lower = rep(-10, 3), upper = rep(10, 3))

settings = list(iterations = 200)

# run the several MCMCs chains either in seperate R sessions, or via R parallel packages
out1 <- runMCMC(bayesianSetup = bayesianSetup, sampler = "DEzs", settings = settings)
out2 <- runMCMC(bayesianSetup = bayesianSetup, sampler = "DEzs", settings = settings)

res <- createMcmcSamplerList(list(out1, out2))
plot(res)

