# TODO: Add comment
# 
# Author: E.Korsching 10.9.2009, 2023
###############################################################################

adaptScale.E <- function(x, minT=0, maxT=1, verbose=F){
	# transform scale - for full scale integer values
	#  [... -NAs produced by integer overflow- see also .Machine ]
	# linear scaling
	# column wise : apply(data,2,adaptScale.E)
	# input range: assumed to be  (-).Machine$integer.max to (+).Machine$integer.max
	# output range: 0 to 1
	if(verbose){ cat("\n linear scaling: .Machine$integer.max",.Machine$integer.max,", min ",min(x, na.rm=T),", max ",max(x, na.rm=T)," to minT ",minT," maxT ",maxT,"\n") }
	m1 <- x<0
	m2 <- x>=0
	x1 <- x[m1]
	x2 <- x[m2]
	mmM <- (maxT-minT)/2
	# negative values abs, re-order, scale 0to1 and re-scale to minT,mmM
	x1 <- (((.Machine$integer.max-abs(x1))/.Machine$integer.max)*mmM)+minT
	# positive values scale 0to1, re-scale to mmM,maxT
	x2 <- ((x2/.Machine$integer.max)*mmM)+minT+mmM
	# keep order
	x[m1] <- x1
	x[m2] <- x2
	return(x)
}

#options(width=160)
#adaptScale.E(c(-1,2,4,5,7), verbose=T)
#adaptScale.E(c(-2147483647,2147483647,2147483600,-2147483600,-1073741823,1073741823), verbose=T)

#adaptScale.E(c(-2147483647,2147483647,2147483600,-2147483600,-1073741823,1073741823,0), minT=10, maxT=300, verbose=T)

