library(bbmle)

## move these somewhere more generic?

## include convergence info, timing, ...
simsum <- function (fit, ...) 
  UseMethod("simsum")

simsum.default <- function(fit) {
  c(coef(fit),confint(fit))
}

simsum.mle2 <- function(fit) {
  c(coef(fit),confint(fit,method="quad"))
}

simsum.rjags <- function(fit,drop.dev=TRUE) {
  coeffs <- fit$BUGSoutput$summary[,"mean"]
  CI <- t(fit$BUGSoutput$summary[,c("2.5%","97.5%")])
  if (drop.dev) {
    coeffs <- coeffs[names(coeffs)!="deviance"]
    CI <- CI[,colnames(CI)!="deviance"]
    c(coeffs,CI)
  }
}


###

## load data, R fit to data as source for simulation
load("../R/fit_fits.RData")
source("../R/tadpole_R_funs.R")
Rfit <- fits[[1]]
d <- as.data.frame(Rfit@data)

source("../ADMB/tadpole_ADMB_funs.R")
file.copy("../ADMB/tadpole.tpl",".")
tadpole_ADMB_setup()

source("../BUGS/tadpole_BUGS_funs.R")
file.copy("../BUGS/tadpole_bugs.txt",".")


## simulates from system with ESTIMATED parameters
simdata <- function(seed) {
  if (!missing(seed)) set.seed(seed)
  transform(d,Kill=simulate(Rfit))
}

simfun <- function(method,seed) {
  d <- simdata(seed)
  if (method=="R") {
    t1 <- system.time(f <- tadpole_R_fit(d))
  } else if (method=="ADMB") {
    t1 <- system.time(f <- tadpole_ADMB_fit(d))
  } else if (method=="BUGS") {
    t1 <- system.time(f <- tadpole_BUGS_fit(d))
  }

  c(t1["elapsed"],simsum(f))
}
    

