#' Cumulative sum scaling factors.
#' 
#' Calculates each column's quantile and calculates the sum up to and including
#' that quantile.
#' 
#' 
#' @param obj A matrix or MRexperiment object.
#' @param p The pth quantile.
#' @param sl The value to scale by (default=1000).
#' @return Returns a matrix normalized by scaling counts up to and including
#' the pth quantile.
#' @seealso \code{\link{fitZig}} \code{\link{cumNorm}}
#' @examples
#' 
#' data(mouseData)
#' head(cumNormMat(mouseData))
#' 
cumNormMat <-
function(obj,p= cumNormStatFast(obj),sl = 1000){
####################################################################################
#   Calculates each column's quantile
#    and calculated the sum up to and
#    including that quantile.
####################################################################################
	x = returnAppropriateObj(obj,FALSE,FALSE)
    xx=x
	xx[x==0] <- NA
	
	qs=colQuantiles(xx,probs=p,na.rm=TRUE)
	
	newMat<-sapply(1:ncol(xx), function(i) {
				   xx=(x[,i]-.Machine$double.eps)
				   sum(xx[xx<=qs[i]])
				   })
	nmat<-sweep(x,2,newMat/sl,"/")
	return(nmat)
}