CmprskPrior <- function(prior.type=rep("noninfm", 2),
                        hyper.list=rep(list(NA),length(prior.type))){
  cmprsk.prior <- LttCmpRsk(margins = prior.type,
                            para.list = hyper.list)
  prior.dcall <- cmprsk.prior$margs.para.list
  dprior <- lapply(paste0("d", cmprsk.prior$margins), get)
  cmprsk.prior$dprior <- dprior
  prior.hyper <- cmprsk.prior$margs.para.list
  cmprsk.prior
}

dPriorf <- function(para.vec, cmprsk.prior){
  prior.dcall <- cmprsk.prior$margs.para.list
  para.vec <- unlist(para.vec)
  for(i in 1:length(para.vec)){
    prior.dcall[[i]]$x <- para.vec[i]
  }
  dprior <- cmprsk.prior$dprior
  y <-sapply(1:length(para.vec), function(x) do.call(dprior[[x]], args = prior.dcall[[x]]))
  y
}


JointPosteriorf <- function(para.vec, cmprsk, cmp.data, Rm,
                            prior.type=NA, hyper.list=NA){
  prior1 <- CmprskPrior(prior.type = prior.type, hyper.list = hyper.list)
  y.prior <- dPriorf(para.vec, cmprsk.prior = prior1)
  prior1$margs.para.list
  y.llk <- loglikeAll(para.vec,cmprsk = cmprsk, cmp.data = cmp.data, Rm=Rm)
  sum(log(y.prior))+y.llk
}





PriorFun <- function(para.vec, cmprsk, 
                     prior.type=rep("gamma", length(unlist(para.vec))),
                     hyper.list=rep(list(c(shape=1,scale=2)),4)){
  d <- length(cmprsk$margins)
  np.vec <- sapply(cmprsk$margs.para.list, length)
  para.list <- ParavecToList(para0.vec = para.vec, np.vec=np.vec)
  para.list <- LttCmpRsk(margins = cmprsk$margins, para.list = para.list)$margs.para.list
  cmprsk.prior <- LttCmpRsk(margins = prior.type,
                            para.list = hyper.list)
  prior.dcall <- cmprsk.prior$margs.para.list
  para.vec <- unlist(para.vec)
  for(i in 1:length(para.vec)){
    prior.dcall[[i]]$x <- para.vec[i]
  }
  dprior <- lapply(paste0("d", cmprsk.prior$margins), get)
  y <-sapply(1:length(para.vec), function(x) do.call(dprior[[x]], args = prior.dcall[[x]]))
  
  cmprsk.prior$dprior <- dprior
  prior.hyper <- cmprsk.prior$margs.para.list
  list(y=y, cmprsk.prior=cmprsk.prior)
}