
## Code to compute lineages, number of lineages, and number of lineages of type A, in R, using the first 500
## realisations. For use in constructing the stacked bar charts shown in Figures 7,8 and 10 via code_5_labora_analysis.R

## Copyright Huy Vo, Jonathan Dawes and Robert Kelsh, 2022 - 2024

labora <- function(alpha,sigma){
  u <- 1; # Number of iterations per each sample
  n <- 500; # Can change to 50 if needed
  no_lins <- matrix(-1,ncol=36,nrow=n*u);
  tp_lins <- matrix(-1,ncol=36,nrow=n*u);
  #1. Create  file name arrays for import and export
  fold <- paste("a",alpha,"s",sigma,"/",sep="");
  pfold <- paste("/MATLAB code/data/",fold,sep = "");
  path <- c(rep(pfold,n));
  datname <- c(rep(fold,n));
  # So the first path should have the form ...a1s0/a1s0t1.csv
  for (i in 1:n){
    path[i] <- paste(path[i],"a",alpha,"s",sigma,"t",i,".csv",sep="");
    datname[i] <- paste(datname[i],"t",i,sep = "");
  }
  
  #3. Iterative step for no_clus
  for (i in 1:n){
    thedata <- read.csv(path[i]);
    coord <- thedata[-c(4,5)];
    timme <- thedata[c(4)];
    traj <- thedata[c(5)];  
    mydata <- log(coord);  # Log transformation  
    k=1;
      for (j in 5:40){
        tryCatch({
        kme<-kmeans(mydata,j, iter.max=50,nstart = 50);  # K-means cluster
        clus<-kme$cluster;  # Extract the cluster array
        time_clus <- rowmean(timme,clus);
        clus_order <- bubble_sort(time_clus);
        
        step1 <- getLineages(mydata,clus,start.clus=clus_order[1]);
        dimn <- dim(pathStat(step1));
        no_lins[(i-1)*u+k,(j-4)] <- dimn[2];
        centers <- rowmean(mydata, clus);
        Ed <- rowSums(centers^2);
        end_clus <- as.numeric(step1@metadata[["slingParams"]][["end.clus"]]);
        tp_lins[(i-1)*u+k,(j-4)] <- sum(Ed[end_clus]>8);}
        , error=function(e){cat("ERROR :",conditionMessage(e),i,"_",k,"_",j, "\n")})
      }
#    }
  }
  return(list(no_lins,tp_lins))
}

list[no_mat_a1000s002,tp_mat_a1000s002] <- labora("1000","002")
list[no_mat_a1000s0015,tp_mat_a1000s0015] <- labora("1000","0015")
list[no_mat_a1000s001,tp_mat_a1000s001] <- labora("1000","001")
list[no_mat_a1000s0005,tp_mat_a1000s0005] <- labora("1000","0005")
list[no_mat_a1000s0,tp_mat_a1000s0] <- labora("1000","0")

save(no_mat_a1000s002,file="no_mat_a1000s002.RData")
save(tp_mat_a1000s002,file="tp_mat_a1000s002.RData")

save(no_mat_a1000s0015,file="no_mat_a1000s0015.RData")
save(tp_mat_a1000s0015,file="tp_mat_a1000s0015.RData")

save(no_mat_a1000s001,file="no_mat_a1000s001.RData")
save(tp_mat_a1000s001,file="tp_mat_a1000s001.RData")

save(no_mat_a1000s0005,file="no_mat_a1000s0005.RData")
save(tp_mat_a1000s0005,file="tp_mat_a1000s0005.RData")

save(no_mat_a1000s0,file="no_mat_a1000s0.RData")
save(tp_mat_a1000s0,file="tp_mat_a1000s0.RData")
#############

list[no_mat_a100s002,tp_mat_a100s002] <- labora("100","002")
list[no_mat_a100s0015,tp_mat_a100s0015] <- labora("100","0015")
list[no_mat_a100s001,tp_mat_a100s001] <- labora("100","001")
list[no_mat_a100s0005,tp_mat_a100s0005] <- labora("100","0005")
list[no_mat_a100s0,tp_mat_a100s0] <- labora("100","0")

save(no_mat_a100s002,file="no_mat_a100s002.RData")
save(tp_mat_a100s002,file="tp_mat_a100s002.RData")

save(no_mat_a100s0015,file="no_mat_a100s0015.RData")
save(tp_mat_a100s0015,file="tp_mat_a100s0015.RData")

save(no_mat_a100s001,file="no_mat_a100s001.RData")
save(tp_mat_a100s001,file="tp_mat_a100s001.RData")

save(no_mat_a100s0005,file="no_mat_a100s0005.RData")
save(tp_mat_a100s0005,file="tp_mat_a100s0005.RData")

save(no_mat_a100s0,file="no_mat_a100s0.RData")
save(tp_mat_a100s0,file="tp_mat_a100s0.RData")
#############

list[no_mat_a10s002,tp_mat_a10s002] <- labora("10","002")
list[no_mat_a10s0015,tp_mat_a10s0015] <- labora("10","0015")
list[no_mat_a10s001,tp_mat_a10s001] <- labora("10","001")
list[no_mat_a10s0005,tp_mat_a10s0005] <- labora("10","0005")
list[no_mat_a10s0,tp_mat_a10s0] <- labora("10","0")

save(no_mat_a10s002,file="no_mat_a10s002.RData")
save(tp_mat_a10s002,file="tp_mat_a10s002.RData")

save(no_mat_a10s0015,file="no_mat_a10s0015.RData")
save(tp_mat_a10s0015,file="tp_mat_a10s0015.RData")

save(no_mat_a10s001,file="no_mat_a10s001.RData")
save(tp_mat_a10s001,file="tp_mat_a10s001.RData")

save(no_mat_a10s0005,file="no_mat_a10s0005.RData")
save(tp_mat_a10s0005,file="tp_mat_a10s0005.RData")

save(no_mat_a10s0,file="no_mat_a10s0.RData")
save(tp_mat_a10s0,file="tp_mat_a10s0.RData")
#############

list[no_mat_a1s002,tp_mat_a1s002] <- labora("1","002")
list[no_mat_a1s0015,tp_mat_a1s0015] <- labora("1","0015")
list[no_mat_a1s001,tp_mat_a1s001] <- labora("1","001")
list[no_mat_a1s0005,tp_mat_a1s0005] <- labora("1","0005")
list[no_mat_a1s0,tp_mat_a1s0] <- labora("1","0")

save(no_mat_a1s002,file="no_mat_a1s002.RData")
save(tp_mat_a1s002,file="tp_mat_a1s002.RData")

save(no_mat_a1s0015,file="no_mat_a1s0015.RData")
save(tp_mat_a1s0015,file="tp_mat_a1s0015.RData")

save(no_mat_a1s001,file="no_mat_a1s001.RData")
save(tp_mat_a1s001,file="tp_mat_a1s001.RData")

save(no_mat_a1s0005,file="no_mat_a1s0005.RData")
save(tp_mat_a1s0005,file="tp_mat_a1s0005.RData")

save(no_mat_a1s0,file="no_mat_a1s0.RData")
save(tp_mat_a1s0,file="tp_mat_a1s0.RData")
#############

list[no_mat_a1s004,tp_mat_a1s004] <- labora("1","004")
save(no_mat_a1s004,file="no_mat_a1s004.RData")
save(tp_mat_a1s004,file="tp_mat_a1s004.RData")

list[no_mat_a10s004,tp_mat_a10s004] <- labora("10","004")
save(no_mat_a10s004,file="no_mat_a10s004.RData")
save(tp_mat_a10s004,file="tp_mat_a10s004.RData")

list[no_mat_a100s004,tp_mat_a100s004] <- labora("100","004")
save(no_mat_a100s004,file="no_mat_a100s004.RData")
save(tp_mat_a100s004,file="tp_mat_a100s004.RData")

list[no_mat_a1000s004,tp_mat_a1000s004] <- labora("1000","004")
save(no_mat_a1000s004,file="no_mat_a1000s004.RData")
save(tp_mat_a1000s004,file="tp_mat_a1000s004.RData")
