srg/heasarc/management/commands/00_heasarc_4xmm_print.py
2024-04-25 17:50:51 +03:00

159 lines
7.0 KiB
Python

from django.core.management.base import BaseCommand, CommandError
from datetime import date
from heasarc.models import INPUT_DATA_DIR
import datetime
from django.utils import timezone
import astropy
from astropy.io import ascii
import pandas as pd
import pymysql
from sqlalchemy import create_engine
import numpy.ma as ma
from heasarc.tdat import tDat
from heasarc.models import HeasarcTable, TableColumn, Heasarc4XMMDR9, HeasarcObjectClass
from heasarc.models import NSIDE_SOURCES, ORDER
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
def load_heasarc_table(filename):
data = astropy.table.Table.read(filename, format='ascii.csv',encoding='latin1')
print(data.info)
"""
keywords = data.meta['keywords']
cols = data.meta['cols']
for key, value in cols.items():
column = TableColumn(table=table)
column.name=key
column.tdat_type=value['type']
column.description=value['description']
column.save()
print(key, '->', value)
,0.525479,0,,-0.523192,,,0,56086.7429513889,56087.5881944444,,,1,f,http://xmm-catalog.irap.omp.eu/source/206931901010113/
"""
tables = Heasarc4XMMDR9.objects.all()
tables.delete()
hp = HEALPix(nside=NSIDE_SOURCES, order=ORDER, frame=FK5())
for item in data:
#crd = SkyCoord(item['ra'], item['dec'], frame=FK5(), unit="deg")
#healpix = hp.skycoord_to_healpix(crd)
url=''
if not (ma.is_masked(item['webpage_url'])):
url=item['webpage_url']
n_detections=0
if not (ma.is_masked(item['n_detections'])):
url=item['n_detections']
healpix = 0
ra = 0.0
dec = 0.0
lon = 0.0
lat = 0.0
if not (ma.is_masked(item['sc_ra']) or ma.is_masked(item['sc_dec'])):
ra = float(item['sc_ra'])
dec = float(item['sc_dec'])
crd = SkyCoord(ra, dec, frame=FK5(), unit="deg")
lon = crd.galactic.l.value
lat = crd.galactic.b.value
healpix = hp.skycoord_to_healpix(crd)
else:
continue
obj = Heasarc4XMMDR9.objects.create(healpix=healpix,
ra=ra,
dec=dec,
lii = lon,
bii = lat,
name=item['iauname'],
error_radius = item['sc_poserr'],
SRCID = item['srcid'],
POSERR = item['sc_poserr'],
DET_ML = item['sc_det_ml'],
EP_1_FLUX = item['sc_ep_1_flux'],
EP_1_FLUX_ERR = item['sc_ep_1_flux_err'],
EP_2_FLUX= item['sc_ep_2_flux'],
EP_2_FLUX_ERR =item['sc_ep_2_flux_err'],
EP_3_FLUX = item['sc_ep_3_flux'],
EP_3_FLUX_ERR = item['sc_ep_3_flux_err'],
EP_4_FLUX = item['sc_ep_4_flux'],
EP_4_FLUX_ERR = item['sc_ep_4_flux_err'],
EP_5_FLUX = item['sc_ep_5_flux'],
EP_5_FLUX_ERR = item['sc_ep_5_flux_err'],
EP_8_FLUX = item['sc_ep_8_flux'],
EP_8_FLUX_ERR = item['sc_ep_8_flux_err'],
EP_9_FLUX = item['sc_ep_9_flux'],
EP_9_FLUX_ERR = item['sc_ep_9_flux_err'],
HR1 = item['sc_hr1'],
HR1_ERR = item['sc_hr1_err'],
HR2 = item['sc_hr2'],
HR2_ERR = item['sc_hr2_err'],
HR3 = item['sc_hr3'],
HR3_ERR = item['sc_hr3_err'],
HR4 = item['sc_hr4'],
HR4_ERR = item['sc_hr4_err'],
EXTENT = item['sc_extent'],
EXT_ERR = item['sc_ext_err'],
#EXT_ML = item['sc_ext_ml'],
#CHI2PROB = item['sc_chi2prob'],
FVAR = item['sc_fvar'],
FVARERR = item['sc_fvarerr'],
#VAR_FLAG = item['sc_var_flag'],
SUM_FLAG = item['sc_sum_flag'],
EP_8_FMIN = item['sc_ep_8_fmin'],
EP_8_FMIN_ERR = item['sc_ep_8_fmin_err'],
EP_8_FMAX = item['sc_ep_8_fmax'],
EP_8_FMAX_ERR = item['sc_ep_8_fmax_err'],
MJD_FIRST = item['mjd_first'],
MJD_LAST = item['mjd_last'],
N_DETECTIONS = n_detections,
CONFUSED = item['confused'],
WEBPAGE_URL = url,)
obj.save()
print('--> Successfully loaded "%s"' % filename)
pass
class Command(BaseCommand):
help = 'Initiates data dase'
# def add_arguments(self, parser):
# parser.add_argument('poll_id', nargs='+', type=int)
def handle(self, *args, **options):
ra_map=34.577746
dec_map=-4.7238375
hp = HEALPix(nside=NSIDE_SOURCES, order=ORDER, frame=FK5())
crd = SkyCoord(ra_map, dec_map, frame=FK5(), unit="deg")
healpix = hp.skycoord_to_healpix(crd)
hlist = hp.cone_search_skycoord(crd,u.Quantity(2.0,unit="deg"))
xmm = Heasarc4XMMDR9.objects.all().filter(healpix__in=hlist)
for src in xmm:
print("fk5;point({}, {}) # point=cross".format(src.ra,src.dec))
return
hp = HEALPix(nside=NSIDE_SOURCES, order=ORDER, frame=FK5())
# update healpix only
srcs = HeasarcXMMSSC.objects.all()
for src in srcs:
crd = SkyCoord(src.ra, src.dec, frame=FK5(), unit="deg")
src.healpix = hp.skycoord_to_healpix(crd)
src.save()
self.stdout.write(self.style.SUCCESS('Done'))