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'))