;$Author: kenb $ ;$Date: 2006-10-11 13:32:51 -0700 (Wed, 11 Oct 2006) $ ;$Header: /home/rumba/cdaweb/dev/control/RCS/align_center.pro,v 1.3 2000/06/23 16:30:39 candey Exp $ ;$Locker: $ ;$Revision: 8 $ pro align_center, X0, Xmin1, Xmax1 ; Scheme for aligning center of box on (X, Y) position ; ####assumes first 3 points define whether log spaced ; 1995 April 10 original (or earlier) ; Robert.M.Candey@gsfc.nasa.gov 2000 June 23; changed "exp" to "10^" ; 2001 March 21 BC, added check for NANs and change to spline_interp for speed, robustness Xmin1 = X0 & Xmax1 = X0 w0nan = where(X0 eq X0, w0nanc) ; find all real values if w0nanc gt 0 then begin X = X0(w0nan) nX = n_elements(X) dx1 = abs(X(1)-X(0)) & dx2 = abs(X(2)-X(1)) if (abs(dx1-dx2) lt 1.e-6 * min([dx1, dx2])) then begin ; evenly spaced X w = lindgen(nX)+1 ; Xs = spline(Xt,X,dindgen(nX+2)-1.) ; add outside points Xt = dindgen(nX) sCoef = spl_init(Xt,X) ; setup spline coefficients Xs = spl_interp(Xt,X,sCoef,dindgen(nX+2)-1.) ; add outside points ; dx = (Xs(w)+Xs(w+1))/2. - (Xs(w-1)+Xs(w))/2. == (Xs(w+1) - Xs(w-1))/2. Xmin = (Xs(w-1)+Xs(w))/2. Xmax = (Xs(w)+Xs(w+1))/2. endif else begin ; assume log spacing wh = where(x le 0, wc) if (wc eq 0) then begin alogX = alog10(x) endif else begin alogX = X*0 ; all 0's wh = where(x gt 0, wc) if (wc gt 0) then alogX(wh) = alog10(X(wh)) endelse ; alogXs = spline(Xt,alogX,dindgen(nX+2)-1.) ; add outside points Xt = dindgen(nX) sCoef = spl_init(Xt,alogX) ; setup spline coefficients alogXs = spl_interp(Xt,alogX,sCoef,dindgen(nX+2)-1.) ; add outside points w = lindgen(nX)+1 ; dx = exp((alogXs(w)+alogXs(w+1))/2.) - exp((alogXs(w-1)+alogXs(w))/2.) Xmin = 10^((alogXs(w-1)+alogXs(w))/2.) Xmax = 10^((alogXs(w)+alogXs(w+1))/2.) endelse ; log spacing Xmin1(w0nan) = Xmin & Xmax1(w0nan) = Xmax endif ; (w0nanc gt 0) else all NANs return end ; align_center