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



reconstruct.biol <- function(x, refset, testset, z){
	# check biological relevance of order
	# replace the order numbers with biological factor names - useful for the output of these functions:
	#  fn1: enumeration.search.dep.boots.GOnly.extf90  ,  fn2: enumeration.search.dep.boots.GOnly.ext2f90
	# input: x: raw data,  refset/testset: used for the above functions
	# z: result of the above functions (matrix): ssq(1), best testc(nr), testc(nr), comb(nc)
	# output: matrix of biological factors
	
	# ini
	ntest <- length(testset)
	nref <- length(refset)
	nrz <- dim(z)[1]
	name.x <- names(x)
	
	# filter and order x names
	name.y <- name.x[c(testset, refset)]
	
	# info
	cat("\n input (x): \n", name.x, "\n")
	cat("\n and ordered input (y): \n", name.y, "\n")
	cat("\n col 1 bis ", ntest, ": Test, col ", ntest + 1, " bis ", ntest + nref, ": Ref \n")
	
	#
	f1 <- function(x, ntest, nref, name.y){
		# 1-ssq, 2:(ntest+1)-ordered test, (ntest+2):((2*ntest)+1)-selected test, ((2*ntest)+2):((2*ntest)+2+nref)-selected reference
		test.selected.ordered <- x[ 2:(ntest+1) ]
		test.selected <- x[ (ntest+2):((2*ntest)+1) ]
		ref.selected <- x[ ((2*ntest)+2):((2*ntest)+1+nref) ]
		if(sum(test.selected)==0 & sum(ref.selected)==0){		# input format sligthly different in line 1 of fn2
			# test ordered , original ref
			erg <- c(  name.y[test.selected.ordered] , name.y[(ntest+1):(ntest+nref)]  )
		}else{
			# test exchanged + ordered , ref exchanged
			erg <- c(  name.y[test.selected][test.selected.ordered] , name.y[ref.selected]  )
		}
	}
	erg <- t( apply(z, 1, f1, ntest, nref, name.y) )
	
	return(erg)
}


#aa <- reconstruct.biol(He589.c, refset=c(1,5,2,3,12,13), testset=c(4,6:11,14:16), z=He589.c.exchange.1)
#aa <- reconstruct.biol(x=horstLCA.2, refset=c(4,5,6,7,8,10), testset=c(1:3,9,11,14,17:20), z=horstLCA.2.hy1.extf90)


