# TODO: Add comment
# 
# Author: E.Korsching  2024
###############################################################################



enst2ensg <- function(x, anno, cond=1){
	# condense ENST expression value columns to ENSG expression value columns
	#  condense by: cond: 1: sum, 2: mean, 3: median
	# x: expression value matrix/df (one to more columns), unique ENST ids expected (!) in the matrix
	# anno: annotation exactly in "ensembl_transcript_id" order of x (!) or already included in the matrix by a column "ensembl_gene_id"
	#  and provided in anno
	xrn <- dimnames(x)[[1]]
	xcn <- dimnames(x)[[2]]
	nc <- ncol(x)
	nvec <- NULL
	uni.ensg <- unique(anno[,"ensembl_gene_id"])
	uni.ensg.len <- length(uni.ensg)
	mat <- data.frame(matrix(0,uni.ensg.len,nc))
	for(i in 1:uni.ensg.len){
		idx.e <- which(uni.ensg[i] == anno[,"ensembl_gene_id"])		# select all enst ids to one ensg id
		idx.len <- length(idx.e)
		if(idx.len>0){
			y <- x[idx.e,,drop=F]
			if(cond==1){
				mat[i,] <- apply(y,2,sum)
			}else if(cond==2){
				mat[i,] <- apply(y,2,mean)
			}else if(cond==3){
				mat[i,] <- apply(y,2,median)
			}
			nvec <- c(nvec,uni.ensg[i])
		}
	}
	dimnames(mat)[[1]] <- nvec
	dimnames(mat)[[2]] <- xcn
	mat <- round( mat, 0 )
	return(mat)
}


#sams.coun2 <- enst2ensg(x=sams.coun1[,c(1:13)], anno=sams.coun1, cond=2)

#enst2ensg(x=data.frame(x1=c(1),row.names=c("T1a")),
#		anno=data.frame(ensembl_gene_id=c("G1"),ensembl_transcript_id=c("T1a")), d=T)
#
#enst2ensg(x=data.frame(x1=c(1,9,2,4,8),row.names=c("T2b","T1a","T2a","T2c","T2d")),
#		anno=data.frame(ensembl_gene_id=c("G2","G1","G2","G2","G2"),ensembl_transcript_id=c("T2b","T1a","T2a","T2c","T2d")), d=T)
#
#enst2ensg(x=data.frame(x1=c(1,2,4,8),row.names=c("T2b","T2a","T2c","T2d")),
#		anno=data.frame(ensembl_gene_id=c("G2","G2","G2","G2"),ensembl_transcript_id=c("T2b","T2a","T2c","T2d")), d=T)
#
#enst2ensg(x=data.frame(x1=c(1,9,2,4,8),x2=c(2,10,3,5,8),row.names=c("T2b","T1a","T2a","T2c","T2d")),
#		anno=data.frame(ensembl_gene_id=c("G2","G1","G2","G2","G2"),ensembl_transcript_id=c("T2b","T1a","T2a","T2c","T2d")), d=T)




enst2ensg.add.sym <- function(x, anno){
	# add HGNC symbols to x
	# x: result of enst2ensg()
	# anno: with "ensembl_gene_id" and "hgnc_symbol" mapping matrix/data frame
	rn <- row.names(x)
	rn.len <- length(rn)
	HGNC <- vector("character",rn.len)
	for(i in 1:rn.len){
		HGNC[i] <- unique(anno[which(rn[i] == anno[,"ensembl_gene_id"]), "hgnc_symbol"] )
	}
	x <- cbind(x,HGNC)
	return(x)
}


#sams.coun3 <- enst2ensg.add.sym(x=sams.coun2, anno=sams.coun1)





