R/lsd-redo.R

## LSD bootstrap solo addition to pick up where it has failed...

## function declaration

LSD_Redo <- function(t.exp=TRUE,N=1000,n.tips=50,n.bs=100,reps=10,bs.label="lsdbs",outgroup=FALSE,
                     fasta.file="Data/1000.fasta",mu=0.0001,R0=2,Tg=2.6,bs=TRUE,sample=FALSE, oldestboolean=FALSE,
                     dir="C:/Users/Oliver/Google Drive/Academic Work/Imperial/O15-12/BEAST/Data Collection/VarianceCheck/",
                     dir.names = c("Size0","Size1","Size0.1","Size10"),rep.name = "rep",
                     lsd.dir="C:\\Users\\Oliver\\Desktop\\lsd",network.path="\\\\fi--san02.dide.ic.ac.uk\\homes\\olw13\\Data\\",
                     input){
  
  ## EXTRA FUNCTIONS ##
  
  givesWarning <- function(expr){
    tryCatch(eval(expr),
             warning = function(cond) TRUE)
  }
  
  ## HANDLE VARIABLES ##
  ##########################################################
  param.dir <- paste(dir,"mu_",mu,"_R0_",R0,"_Tg_",Tg,"/",sep="")
  network <- paste(network.path,tail(strsplit(dir,"/")[[1]],1),"\\",sep="")
  network.dir <- paste(network.path,tail(strsplit(dir,"/")[[1]],1),"\\","mu_",mu,"_R0_",R0,"_Tg_",Tg,"\\",sep="")
  
  a <- 0
  ## MAIN LOOP ##
  ##########################################################
  
  
  for (d in 1:length(dir.names)){
    
    main.dir <- paste(param.dir,dir.names[d],"/",sep="")
    network.main.dir <- paste(network.dir,dir.names[d],"\\",sep="")
    
    for (r in 1:reps){
      
      rep.dir <- paste(main.dir,rep.name,r,"/",sep="")
      network.rep.dir <- paste(network.main.dir,rep.name,r,"\\",sep="")
      
      if(input$fail[((d-1)*reps)+r]==FALSE){
        ## do nothing as fine
      } else {
        ## attempt to rerun
        if(givesWarning(system(input$lsds[((d-1)*10)+r]))==TRUE){
          a <- a+1
        } else {
          input$fail[((d-1)*reps)+r] <- FALSE
          
          
          ## colate and plotbootstrap error against sigma
          lsd.tb <- read.table(file=paste(rep.dir,"lsdbs_tree.txt.result",sep=""),skip = 20,nrows = n.bs)
          input[[d]][,r] <- lsd.tb[,6]
          input[[d+length(dir.names)]][,r] <- as.numeric(substr(lsd.tb[,4], 1, nchar(as.character(lsd.tb[,4]))-1))
          t.res[[d]][,r] <- lsd.tb[,6]
          m.res[[d]][,r] <- as.numeric(substr(lsd.tb[,4], 1, nchar(as.character(lsd.tb[,4]))-1))
          
          
          ## find most accurate sample set
          #best.nex <- which((t.res[[d]][,r])^2==min((t.res[[d]][,r]^2)))
          #if (length(best.nex)>1) best.nex <- best.nex[1]
          
          ## create BEAST xml in the network data directory
          #Nex_2_BEASTxml(template.xml = "C:/Users/Oliver/Google Drive/Academic Work/Imperial/git/sims4/Data/test.xml",
          #               nex = paste(rep.dir,bs.label,best.nex,".nex",sep=""),file = paste(network.rep.dir,"lsd-beast",r,".beast.xml",sep=""),
          #               rep.str = paste("lsd-beast",r,sep=""),cont = t.exp)
          
          ## create necessary submit bat in the network share
          #fileConn<-file(paste(network.rep.dir,"lsd-beast",r,".cluster.bat",sep=""))
          #writeLines(paste("job submit /scheduler:fi--dideclusthn.dide.ic.ac.uk /stdout:",
          #                 network.rep.dir,"out",r,".txt /stderr:",network.rep.dir,"err",r,".txt ",
          #                 "/numcores:1-1 /jobtemplate:GeneralNodes ", paste(network.rep.dir,"lsd-beast",r,".beast.bat",sep=""),sep=""), 
          #           fileConn)
          #close(fileConn)
          
          ## create necessary beast bat in the network share
          #fileConn2<-file(paste(network.rep.dir,"lsd-beast",r,".beast.bat",sep=""))
          #writeLines(paste("call setjava64 \n",
          #                 "java -Djava.library.path=\"\\\\fi--san02.dide.ic.ac.uk\\homes\\olw13\\libhmsbeagle\" -jar", 
          #                 " \"\\\\fi--san02.dide.ic.ac.uk\\homes\\olw13\\BEAST\\lib\\beast.jar\"",
          #                 " -working -overwrite -beagle -beagle_CPU -beagle_SSE -beagle_instances 8 -threads 8 ",
          #                 paste("\"",network.rep.dir,"lsd-beast",r,".beast.xml\"",sep=""),
          #                 sep=""),fileConn2)
          #close(fileConn2)
          
          ## call cluster BEAST
          #system(paste(network.rep.dir,"lsd-beast",r,".cluster.bat",sep=""))
          
        }
      }
    }
  }
  if (a>=1){
    print(paste("Redo: ",a,"Failures exist",sep=""))
  }
  
  return(input)
}
OJWatson/sims4 documentation built on May 7, 2019, 8:33 p.m.