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

86 lines
3.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, Heasarc3MAXI, HeasarcObjectClass
from heasarc.models import NSIDE_SOURCES, ORDER
from monthplan.models import NSIDE_PLATES
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 astropy.io import fits
import math
def load_heasarc_table(filename):
"""
['Seq', '3MAXI', 'RAdeg', 'DEdeg', 'ePos', 's4-10keV', 'F4-10keV', 'e_F4-10keV', 's3-4keV', 'F3-4keV', 'l_F3-4keV', 'e_F3-4keV', 's10-20keV', 'F10-20keV', 'l_F10-20keV', 'e_F10-20keV', 'F3-10keV', 'e_F3-10keV', 'HR1', 'e_HR1', 'HR2', 'e_HR2', 'HR3', 'e_HR3', 'TSVar', 'XVA', 'e_XVA']
"""
hdul = fits.open(filename)
data = hdul[1].data
cols = hdul[1].columns
print(cols.names)
#tables = HeasarcSwiftBAT105m.objects.all()
#tables.delete()
hp = HEALPix(nside=NSIDE_SOURCES, order=ORDER, frame=FK5())
hp_plate = HEALPix(nside=NSIDE_PLATES, order=ORDER, frame=FK5())
for item in data:
healpix = 0
ra = 0.0
dec = 0.0
lon = 0.0
lat = 0.0
if not (ma.is_masked(item['RAdeg']) or ma.is_masked(item['DEdeg'])):
ra = float(item['RAdeg'])
dec = float(item['DEdeg'])
crd = SkyCoord(ra, dec, frame=FK5(), unit="deg")
lon = crd.galactic.l.value
lat = crd.galactic.b.value
healpix = hp.skycoord_to_healpix(crd)
healpix_plate = hp_plate.skycoord_to_healpix(crd)
else:
continue
sign=item['s4-10keV']
obj = Heasarc3MAXI.objects.create(healpix=healpix,
healpix_plate=healpix_plate,
ra=ra,
dec=dec,
lii = lon,
bii = lat,
name="3MAXI {}".format(item['3MAXI']),
error_radius = float(item['ePos'])*60*60,
sign = sign,
flux = float(item['F4-10keV']),)
obj.save()
print('--> Successfully loaded "%s"' % filename)
pass
class Command(BaseCommand):
help = 'Initiates data dase'
def handle(self, *args, **options):
load_heasarc_table('/data/VizieR/3MAXI/table1.fits')
self.stdout.write(self.style.SUCCESS('Done'))