library(ClusterCall)
library(fitTetra)
library(viridis)

setwd("~") ### change accordingly
setwd("~/Google Drive/Manuscripts/FitTetra 2/supplemetary files")

if(!dir.exists("output")) dir.create("output")

### this assumes that Supplementary_file_2.zip was unpacked as a Supplementary_file_2 directory
source("Supplementary_file_2/helper_functions.R")

wd <- "output"
data("intensities")
intensities <- as.matrix(intensities)

allIntensities_r     <- NULL
allIntensities_theta <- NULL
allIntensitiesF1_A   <- intensities[1:1000,]
allIntensitiesF1_B   <- intensities[1001:2000,]
for(i in 1:nrow(allIntensitiesF1_A)){
  allIntensities_polar <- cart2pol(allIntensitiesF1_A[i,],allIntensitiesF1_B[i,])
  allIntensities_r     <- rbind(allIntensities_r,         allIntensities_polar[,1])
  allIntensities_theta <- rbind(allIntensities_theta,     allIntensities_polar[,2]*2/pi)
}
probeNames                     <- strsplit(rownames(allIntensitiesF1_A),"-")
probeNames                     <- do.call(rbind,probeNames)
probeNames                     <- paste(probeNames[,1],probeNames[,2],sep = "-")
rownames(allIntensities_theta) <- probeNames
rownames(allIntensities_r)     <- probeNames

samples <- c(grep("P1",colnames(allIntensities_theta)),
                  grep("P2",colnames(allIntensities_theta)),
                  grep("F1",colnames(allIntensities_theta)))

write.csv(allIntensities_theta[,samples],"test_theta.csv",quote = F)
write.csv(allIntensities_r[,samples],"test_r.csv",quote = F)
write.csv(allIntensities_theta[,grep("panel",colnames(allIntensities_theta))],
          "test_panel_theta.csv",quote = F)

results   <- NULL
F1Samples <- colnames(intensities)[grep("F1",colnames(intensities))]
P1Samples <- colnames(intensities)[grep("P1",colnames(intensities))]
P2Samples <- colnames(intensities)[grep("P2",colnames(intensities))]
for(minP in c(0.1, 0.25, 0.5, 0.75, 0.9, 0.95, 0.99)){
  for(maxR in c(0.1, 0.25, 0.4, 0.5 ,0.6, 0.75)){
    fileName <- paste0(wd,"/results_cluster_max.range_",maxR,"_min.posterior_",minP,".RData")
    if(!file.exists(fileName)){
      cat("File:",fileName,"not found, it will be created.\n")
      fileAS <- paste0(wd,"/clusterCall_fitTetra-data_max.range_",maxR,
        "_min.posterior_",minP,".RData")
      if(!file.exists(fileAS)){
        cat("File:",fileAS,"not found, it will be created.\n")
        as <- read.pop(theta.file = "test_theta.csv", r.file = "test_r.csv")
        AS <- CC.bipop(as, parent1 = P1Samples, 
                     parent2 = P2Samples, max.missing = 1, 
                     min.sep = 0.01, max.range = maxR, min.posterior = minP)
        save(AS, file=fileAS)
      }else{
        cat("File:",fileAS," found, analysis will proceed.\n")
        load(fileAS)
      }
      allGeno           <- AS@geno
      curResults        <- checkResults(allGeno, F1Samples, P1Samples, P2Samples, fracInvalid_threshold=0.05,n.geno=1000)
    }else{
      cat("File:",fileName," found, analysis will proceed.\n")
      load(fileName)
    }
    results <- rbind(results,c(maxR,minP,curResults$genotypeCategories))
    save(results,file=paste0(wd,"/results_clusterCall_fitTetra-data",format(Sys.time(), "%d-%m-%Y"),".RData"))
 }
}
results[which(is.na(results))] <- 0
results[,3] <- apply(results,1,function(x){1000-sum(x[4:7])})
colnames(results) <- c("max.range", "min.posterior","no_model","too_many_NAs","monomorphic",
                       "not_matching", "matching")
save(results,file=paste0(wd,"/results_clusterCall_fitTetra-data",format(Sys.time(), "%d-%m-%Y"),".RData"))

pdf("output/results_clusterCall_fitTetra-data_plotted.pdf")
for(i in seq(1,nrow(results),3)){
  plotResults(results[i,3:7],results[i+1,3:7],results[i+2,3:7], 
              main=paste("min.post=",paste(results[i:(i+2),2],collapse = ", "),                                         "max.range=",paste(results[i:(i+2),1],collapse = ", ")))
}

dev.off()
