# Path: ugali/utils/projector.py
# class SphericalRotator:
# class Projector:
#     def __init__(self, lon_ref, lat_ref, zenithal=False):
#     def setReference(self, lon_ref, lat_ref, zenithal=False):
#     def cartesian(self,lon,lat):
#     def rotate(self, lon, lat, invert=False):
#     def __init__(self, lon_ref, lat_ref, proj_type = 'ait'):
#             def rotate(lon,lat,invert=False):
#     def sphereToImage(self, lon, lat):
#     def imageToSphere(self, x, y):
# def sphere2image(lon_ref,lat_ref,lon,lat):
# def image2sphere(lon_ref,lat_ref,x,y):
# def cartesianSphereToImage(lon, lat):
# def cartesianImageToSphere(x,y):
# def aitoffSphereToImage(lon, lat):
# def aitoffImageToSphere(x, y):
# def gnomonicSphereToImage(lon, lat):
# def gnomonicImageToSphere(x, y):
# def angsep2(lon_1, lat_1, lon_2, lat_2):
# def angsep(lon1,lat1,lon2,lat2):
# def galToCel(ll, bb):
# def celToGal(ra, dec):
# def estimate_angle(angle, origin, new_frame, offset=1e-7):
# def gal2cel_angle(glon,glat,angle,offset=1e-7):
# def cel2gal_angle(ra,dec,angle,offset=1e-7):
# def dec2hms(dec):
# def dec2dms(dec):
# def hms2dec(hms):
# def dms2dec(dms):
# def sr2deg(solid_angle):
# def deg2sr(solid_angle):
# def distanceToDistanceModulus(distance):
# def distanceModulusToDistance(distance_modulus):
# def ang2const(lon,lat,coord='gal'):
# def ang2iau(lon,lat,coord='gal'):
# def match(lon1, lat1, lon2, lat2, tol=None, nnearest=1):
#     DEGREE = 360.
#     HOUR = 24.
#     MINUTE = 60.
#     SECOND = 3600.
#     DEGREE = 360.
#     HOUR = 24.
#     MINUTE = 60.
#     SECOND = 3600.
#     DEGREE = 360.
#     HOUR = 24.
#     MINUTE = 60.
#     SECOND = 3600.
#     DEGREE = 360.
#     HOUR = 24.
#     MINUTE = 60.
#     SECOND = 3600.


import ugali.candidate.associate
import ugali.utils.parser
import numpy as np
    import argparse
from ugali.utils.projector import gal2cel,ang2const,ang2iau
    opts = parser.parse_args()

    catalog = ugali.candidate.associate.SourceCatalog()
    for i in CATALOGS:
        catalog += ugali.candidate.associate.catalogFactory(i)

    for name,(glon,glat,radius) in zip(opts.names, opts.coords):
        ra,dec = gal2cel(glon,glat)
        iau = ang2iau(glon,glat)
        const = ang2const(glon,glat)[0]
        if radius <= 0: radius = None
    
        idx1,idx2,sep = catalog.match([glon],[glat],tol=radius,nnearest=opts.nnearest)
        match = catalog[idx2]

        if len(match) > 0:
            n = match[0]['name']
            s = sep[0]
            l,b = match[0]['glon'],match[0]['glat']
            r,d = match[0]['ra'],match[0]['dec']
        else:
            n = 'NONE'
            s = np.nan
            l,b = np.nan,np.nan
            r,d = np.nan,np.nan

            
        if opts.gal is not None:
            msg='%s [%s, %s] (GLON=%.2f,GLAT=%.2f) --> %s (GLON=%.2f,GLAT=%.2f): %.4f'%(name,iau,const,glon,glat,n,l,b,s)
        else:

# Path: ugali/utils/projector.py
# class SphericalRotator:
# class Projector:
#     def __init__(self, lon_ref, lat_ref, zenithal=False):
#     def setReference(self, lon_ref, lat_ref, zenithal=False):
#     def cartesian(self,lon,lat):
#     def rotate(self, lon, lat, invert=False):
#     def __init__(self, lon_ref, lat_ref, proj_type = 'ait'):
#             def rotate(lon,lat,invert=False):
#     def sphereToImage(self, lon, lat):
#     def imageToSphere(self, x, y):
# def sphere2image(lon_ref,lat_ref,lon,lat):
# def image2sphere(lon_ref,lat_ref,x,y):
# def cartesianSphereToImage(lon, lat):
# def cartesianImageToSphere(x,y):
# def aitoffSphereToImage(lon, lat):
# def aitoffImageToSphere(x, y):
# def gnomonicSphereToImage(lon, lat):
# def gnomonicImageToSphere(x, y):
# def angsep2(lon_1, lat_1, lon_2, lat_2):
# def angsep(lon1,lat1,lon2,lat2):
# def galToCel(ll, bb):
# def celToGal(ra, dec):
# def estimate_angle(angle, origin, new_frame, offset=1e-7):
# def gal2cel_angle(glon,glat,angle,offset=1e-7):
# def cel2gal_angle(ra,dec,angle,offset=1e-7):
# def dec2hms(dec):
# def dec2dms(dec):
# def hms2dec(hms):
# def dms2dec(dms):
# def sr2deg(solid_angle):
# def deg2sr(solid_angle):
# def distanceToDistanceModulus(distance):
# def distanceModulusToDistance(distance_modulus):
# def ang2const(lon,lat,coord='gal'):
# def ang2iau(lon,lat,coord='gal'):
# def match(lon1, lat1, lon2, lat2, tol=None, nnearest=1):
#     DEGREE = 360.
#     HOUR = 24.
#     MINUTE = 60.
#     SECOND = 3600.
#     DEGREE = 360.
#     HOUR = 24.
#     MINUTE = 60.
#     SECOND = 3600.
#     DEGREE = 360.
#     HOUR = 24.
#     MINUTE = 60.
#     SECOND = 3600.
#     DEGREE = 360.
#     HOUR = 24.
#     MINUTE = 60.
#     SECOND = 3600.


# Path: ugali/scratch/lookup.py
import ugali.candidate.associate
import ugali.utils.parser
import numpy as np
    import argparse
from ugali.utils.projector import gal2cel,ang2const,ang2iau

    opts = parser.parse_args()

    catalog = ugali.candidate.associate.SourceCatalog()
    for i in CATALOGS:
        catalog += ugali.candidate.associate.catalogFactory(i)

    for name,(glon,glat,radius) in zip(opts.names, opts.coords):
        ra,dec = gal2cel(glon,glat)
        iau = ang2iau(glon,glat)
        const = ang2const(glon,glat)[0]
        if radius <= 0: radius = None
    
        idx1,idx2,sep = catalog.match([glon],[glat],tol=radius,nnearest=opts.nnearest)
        match = catalog[idx2]

        if len(match) > 0:
            n = match[0]['name']
            s = sep[0]
            l,b = match[0]['glon'],match[0]['glat']
            r,d = match[0]['ra'],match[0]['dec']
        else:
            n = 'NONE'
            s = np.nan
            l,b = np.nan,np.nan
            r,d = np.nan,np.nan

            
        if opts.gal is not None:
            msg='%s [%s, %s] (GLON=%.2f,GLAT=%.2f) --> %s (GLON=%.2f,GLAT=%.2f): %.4f'%(name,iau,const,glon,glat,n,l,b,s)
        else:

            msg='%s [%s, %s] (RA=%.2f,DEC=%.2f) --> %s (RA=%.2f,DEC=%.2f): %.4f'%(name,iau,const,ra,dec,n,r,d,s)