# This script processes output from the Cluster Picker and the Cluster Matcher. Here two ouput files of matched clusters (2005 and 2007) are read as well as the Cluster Matcher output which links them together. All three files are merged into one data frame, and cluster growth is calculated for each cluster. Clusters are classed as either single origin or multiple orgin and the growth among these two groups is compared using a Kruskal Wallis test
# M Ragonnet 6 Dec 2012

setwd("")

# Read all 3 files
CP1212 <- read.csv("UK1212clusters.csv")
CP1790 <- read.csv("UK1790clusters.csv")
matches <- read.csv("ClusterMatches.csv")

# Remove reciprocal match in cluster matcher output
matches <- matches[matches$DataSet==1,]

# Rename columns
for (i in 1:length(colnames(CP1212))){
	colnames(CP1212)[i] <- paste(colnames(CP1212)[i],"2005", sep="")}

for (i in 1:length(colnames(CP1790))){
	colnames(CP1790)[i] <- paste(colnames(CP1790)[i],"2007", sep="")}
	
names(CP1212)[names(CP1212)== "ClusterNumber2005"] <- "ClusterID2005"
names(CP1790)[names(CP1790)== "ClusterNumber2007"] <- "ClusterID2007"

names(matches)[names(matches)== "Clust_ID"] <- "ClusterID2005"
names(matches)[names(matches)== "Matching_Clust_ID"] <- "ClusterID2007"


# Merge files
superfile1 <- merge(matches,CP1212,by="ClusterID2005")
superfile2 <- merge(superfile1,CP1790,by="ClusterID2007")


# Assign clusters as single origin (true) or multiple origin (false)
# note that columns A to Q are the 17 aggregated group centres and that these columns contain for each cluster the number patients from that centre
# if the number of sequences from a single centre is equal to the total number of sequences in that cluster in 2005 (NumberOfTips2005) , that cluster is single origin.

for (i in 1:length(superfile2[,1])){
	if (superfile2$A[i]== superfile2$NumberOfTips2005[i] || superfile2$B[i]== superfile2$NumberOfTips2005[i] || superfile2$C[i]== superfile2$NumberOfTips2005[i] || superfile2$D[i]== superfile2$NumberOfTips2005[i] || superfile2$E[i]== superfile2$NumberOfTips2005[i] || superfile2$F[i]== superfile2$NumberOfTips2005[i] || superfile2$G[i]== superfile2$NumberOfTips2005[i] ||superfile2$H[i]== superfile2$NumberOfTips2005[i] || superfile2$I[i]== superfile2$NumberOfTips2005[i] || superfile2$J[i]== superfile2$NumberOfTips2005[i] ||superfile2$K[i]== superfile2$NumberOfTips2005[i] || superfile2$L[i]== superfile2$NumberOfTips2005[i] || superfile2$M[i]== superfile2$NumberOfTips2005[i] || superfile2$N[i]== superfile2$NumberOfTips2005[i] || superfile2$O[i]== superfile2$NumberOfTips2005[i] || superfile2$P[i]== superfile2$NumberOfTips2005[i] || superfile2$Q[i]== superfile2$NumberOfTips2005[i]){
		superfile2$singleOrigin[i] <- TRUE
		}
	else {
		superfile2$singleOrigin[i] <- FALSE
		}
}

# Calculate growth for each cluster
for (i in 1:length(superfile2[,1])){
	superfile2$growth[i] <- (superfile2$NumberOfTips2007[i] - superfile2$NumberOfTips2005[i]) /superfile2$NumberOfTips2005[i]
}

# Kruskal Wallis to compare growth of single origin versus multiple origin clusters
growthTRUE <- superfile2$growth[superfile2$singleOrigin==TRUE]
growthFALSE <- superfile2$growth[superfile2$singleOrigin==FALSE]
kruskal.test(list(growthTRUE, growthFALSE))

## Dropping 1000 tips from a tree sequentially (outputting new tree each time)
library(ape)
tr <- read.tree("tree.nwk")
for (i in 2:18){
	sample1000 <- sample (tr$tip.label, size=1000, replace=FALSE)
	tr <- drop.tip(tr, sample1000)
	newTreeFileName <- paste("tr",i,".nwk", sep="")
	write.tree(tr, newTreeFileName)
	}