Viewing contents of file '../idllib/sdss/allpro/eq2survey.pro'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;+
;
; NAME:
;    EQ2SURVEY
;       
; PURPOSE:
;    Convert from ra, dec to lambda, eta (SDSS survey coordinates)
;
; CALLING SEQUENCE:
;    eq2survey, ra, dec, lambda, eta
;
; INPUTS: 
;    ra: Equatorial latitude in degrees 
;    dec: Equatorial longitude in degrees
;
; OPTIONAL INPUTS:
;    None
;
; KEYWORD PARAMETERS:
;    None
;       
; OUTPUTS: 
;    lambda: Survey longitude in degrees
;    eta: Survey latitude in degrees
;
; OPTIONAL OUTPUTS:
;    None
;
; CALLED ROUTINES:
;    ATBOUND
;    ATBOUND2
; 
; PROCEDURE: 
;    
;	
;
; REVISION HISTORY:
;    Written: 5/15/2000  Erin Scott Sheldon
;                        Taken from astrotools.
;       
;                                      
;-                                       
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

PRO atbound, angle, min, max

  w=where(angle LT min,nw)
  WHILE nw NE 0 DO BEGIN 
      angle[w] = angle[w] + 360.0
      w=where(angle LT min,nw)
  ENDWHILE 

  w=where(angle GE max,nw)
  WHILE nw NE 0 DO BEGIN 
      angle[w] = angle[w] - 360.0
      w=where(angle GT max,nw)
  ENDWHILE 

  return
END 

PRO atbound2, theta, phi

  atbound, theta, -180.0, 180.0
  w = where( abs(theta) GT 90.,nw)
  IF nw NE 0 THEN BEGIN
      theta[w] = 180. - theta[w]
      phi[w] = phi[w] + 180.
  ENDIF 
  atbound, theta, -180.0, 180.0
  atbound, phi, 0.0, 360.0

  w=where( abs(theta) EQ 90., nw)
  IF nw NE 0 THEN phi[w] = 0.0

  return
END 

PRO eq2survey, ra_in, dec_in, slong, slat

  IF n_params() LT 2 THEN BEGIN 
      print,'-Syntax: eq2survey, ra, dec, lambda, eta'
      print,' ra, dec in degrees'
      return
  ENDIF 
  
  ;; slong=lambda
  ;; slat=eta

  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;; Some parameters
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

  at_surveyCenterRa  =  185.0
  at_surveyCenterDec =   32.5

  at_deg2Rad = !dpi/180.
  at_rad2Deg = 180./!dpi
 
  node = at_surveyCenterRa - 90.
  node = node * at_deg2Rad

  etaPole = at_surveyCenterDec * at_deg2Rad

  nra = n_elements(ra_in)
  ndec = n_elements(dec_in)
  IF nra NE ndec THEN BEGIN 
      print,'ra and dec must be same size'
      return
  ENDIF 

  ;; Convert to radians
  ra = double(ra_in*at_deg2Rad)
  dec = double(dec_in*at_deg2Rad)

  x1 = cos(ra-node)*cos(dec)
  y1 = sin(ra-node)*cos(dec)
  z1 = sin(dec)

  slong = -asin( temporary(x1) )             ;lambda
  slat = atan( temporary(z1), temporary(y1) ) - etaPole ;eta

  ;; convert to degrees
  slong = slong * at_rad2Deg
  slat = slat * at_rad2Deg

  atbound2, slong, slat
  atbound, slat, -180.0, 180.0
  
  w=where(slat GT (90. - at_surveyCenterDec) , nw)
  IF nw NE 0 THEN BEGIN 
      slat[w] = slat[w] - 180.
      slong[w] = 180. - slong[w]
  ENDIF 
  atbound, slong, -180.0, 180.0
  
  return
END