# TODO: Add comment
# 
# Author: E.Korsching 10.9.2009
###############################################################################



t.test.fast <- function(rownames.x,var.equal,ncx,ncy,xcols.var,ycols.var,diff.means,mu,alpha){
    # t-test for data.frame, fast
    # can produce NA values
    
    #descison 1: normal two sided two sample t-test, descision 2: Welch variant
	# if both var=0 -> 0
    conf.int.s <- ifelse(var.equal,
                         sqrt((((ncx - 1) * xcols.var + (ncy - 1) * ycols.var) * (1/ncx + 1/ncy))/(ncx + ncy - 2)),
                         sqrt((xcols.var/ncx) + (ycols.var/ncy)))
    #descison 1: normal two sided two sample t-test, descision 2: Welch variant
	# if conf.int.s=0 -> INF or conf.int.s=0 & var=0 -> NaN
	df <- ifelse(var.equal,
                 ncx + ncy - 2,
                 { cc <- xcols.var/(ncx * conf.int.s^2); 1/((cc^2)/(ncx - 1) + ((1 - cc)^2)/(ncy - 1)) } )

	t.stat <- (diff.means - mu)/conf.int.s			    # distance from 0 in standard deviations (t-distribution)
	conf.int.hw <- qt((1 - alpha/2), df) * conf.int.s	# confidence for (x-y) =0 two sided testing
	t.p.value <- data.frame(2 * (1 - pt(abs(t.stat), df)),var.equal,conf.int.hw,row.names=rownames.x, dup.row.names=T)
	names(t.p.value) <- c("t.p","var.equal","conf.int.hw")
	
    return(t.p.value)
}



