126 lines
4.0 KiB
Python
126 lines
4.0 KiB
Python
from django.core.management.base import BaseCommand, CommandError
|
|
from django.core.paginator import Paginator
|
|
|
|
from astropy_healpix import HEALPix
|
|
from astropy.coordinates import SkyCoord # High-level coordinates
|
|
from astropy.coordinates import ICRS, Galactic, FK4, FK5 # Low-level frames
|
|
from astropy.coordinates import Angle, Latitude, Longitude # Angles
|
|
import astropy.units as u
|
|
|
|
from multiprocessing import Pool, cpu_count
|
|
|
|
from datetime import date
|
|
import datetime
|
|
import time
|
|
from django.utils import timezone
|
|
import astropy
|
|
from astropy.io import ascii
|
|
import pandas as pd
|
|
import pymysql
|
|
from sqlalchemy import create_engine
|
|
|
|
from heasarc.models import HeasarcBase
|
|
from artsurvey.models import ArtSurveySource, ArtSurvey
|
|
from srglib.utils import load_vizier_nvss
|
|
from srglib.utils import load_vizier_first
|
|
from srglib.utils import load_vizier_sumss
|
|
|
|
from astrobasis.models import GAIADR3
|
|
from astrobasis.models import GLIMPSE
|
|
|
|
from srglib.utils import find_counterparts
|
|
from srglib.utils import load_vizier_allwise
|
|
from srglib.utils import load_simbad_for_skymap_sources
|
|
|
|
from heasarc.models import NSIDE_SOURCES, ORDER
|
|
|
|
NPARTS=10
|
|
|
|
def do_match():
|
|
|
|
minrad=5
|
|
maxdist=30
|
|
hp = HEALPix(nside=NSIDE_SOURCES, order=ORDER, frame=FK5())
|
|
|
|
"""
|
|
g=GLIMPSE.objects.all()
|
|
g2=g.filter(healpix__exact=0)
|
|
print("Total {} healpix=NULL {}".format(g.count(),g2.count()))
|
|
print(g2[0].ra,g2[0].dec,g2[0].healpix)
|
|
return
|
|
"""
|
|
|
|
srcs = HeasarcBase.objects.all().filter(error_radius__lte=minrad)#.order_by("-id")
|
|
|
|
|
|
pages = Paginator(srcs, 100000)
|
|
pages_count = pages.count
|
|
pages_num = pages.num_pages
|
|
pages_range = pages.page_range
|
|
|
|
gaia3_all = GAIADR3.objects.all()
|
|
|
|
for i in pages_range:
|
|
page = pages.page(i)
|
|
start_time0 = time.time()
|
|
for src in page.object_list:
|
|
crd = SkyCoord(src.ra, src.dec, frame="fk5", unit="deg")
|
|
heal = hp.cone_search_skycoord(crd, radius=maxdist*u.arcsecond)
|
|
|
|
src.gaia3.clear()
|
|
try:
|
|
gaia3_all_cone = gaia3_all.filter(healpix__in=heal)
|
|
except:
|
|
continue
|
|
gaia_list=[]
|
|
gaia_crd_cone = SkyCoord(gaia3_all_cone.values_list('ra', flat=True),
|
|
gaia3_all_cone.values_list('dec', flat=True),
|
|
frame="fk5", unit="deg")
|
|
sep_cone = crd.separation(gaia_crd_cone).arcsecond
|
|
isel = (sep_cone <= minrad)
|
|
|
|
index=0
|
|
for gaia in gaia3_all_cone:
|
|
#gaia_crd = SkyCoord(gaia.ra, gaia.dec, frame="fk5", unit="deg")
|
|
#sep=crd.separation(gaia_crd).arcsecond
|
|
if(isel[index]):
|
|
gaia_list.append(gaia)
|
|
index=index+1
|
|
|
|
if(gaia_list):
|
|
src.gaia3.add(*gaia_list)
|
|
|
|
elapsed = time.time() - start_time0
|
|
estimated = (elapsed*(pages_num-i))/60/60
|
|
print("Page {}/{} for {:.2f} sec, est. {:.2f} hours".format(i,pages_num,elapsed,estimated))
|
|
|
|
|
|
|
|
|
|
|
|
#load_simbad_for_skymap_sources(srcs,minrad=minrad,maxdist=maxdist)
|
|
#load_vizier_allwise(srcs, minrad=minrad, maxdist=maxdist)
|
|
#load_vizier_nvss(srcs, minrad=minrad, maxdist=maxdist)
|
|
#load_vizier_first(srcs, minrad=minrad, maxdist=maxdist)
|
|
#load_vizier_sumss(srcs, minrad=minrad, maxdist=maxdist)
|
|
#find_counterparts(srcs, GAIADR3.objects.all(), "gaia3", maxdist=maxdist, minrad=minrad)
|
|
#for src in srcs:
|
|
# src.heasarc.clear()
|
|
|
|
#find_counterparts(srcs, GAIADR3.objects.all(),'gaia3', maxdist=maxdist, minrad=minrad)
|
|
#find_counterparts(srcs, GLIMPSE.objects.all(),'glimpse', maxdist=maxdist, minrad=minrad)
|
|
|
|
class Command(BaseCommand):
|
|
help = 'Initiates data dase'
|
|
|
|
def handle(self, *args, **options):
|
|
|
|
start_time = time.time()
|
|
|
|
do_match()
|
|
hours = (time.time() - start_time)/60/60
|
|
print("--- {:.2f} hours ---".format(hours))
|
|
|
|
self.stdout.write(self.style.SUCCESS('Done'))
|
|
|