srg/srgcat/management/commands/00_load_art_gc.py
2024-04-26 12:43:00 +03:00

91 lines
3.3 KiB
Python

from django.core.management.base import BaseCommand, CommandError
from datetime import date
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
from heasarc.tdat import tDat
from heasarc.models import HeasarcTable, TableColumn, HeasarcObjectClass, NSIDE_SOURCES, ORDER
from srgcat.models import ArtCat, ArtSource
from astropy.table import Table
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
# XMMU JHHMMSS.s+/-DDMMSS.
# www.cosmos.esa.int/web/xmm-newton/source-naming-convention
def make_source_name(key, ra, dec):
c = SkyCoord(ra, dec, frame=FK5(), unit="deg")
str1 = c.to_string('hmsdms',alwayssign=False,pad=False,precision=1).split()
str2 = c.to_string('hmsdms',alwayssign=False,pad=False,precision=0).split()
name = key+" J%s%s" % (str1[0].replace('h','').replace('m','').replace('s',''),
str2[1].replace('d','').replace('m','').replace('s',''))
return name
def load_gc_table(filename, name, e1, e2):
datafile='/export/django/srg/data/Rodion_GC/'+filename
cat = ArtCat(name=name, e1=e1, e2=e2)
cat.save()
table = Table.read(datafile, format='ascii')
# ra dec sig cnts/s erg/s/cm^2
for item in table:
ra=item['ra']
dec=item['dec']
src_name = make_source_name('IKIa', ra, dec)
crd = SkyCoord(ra, dec, frame=FK5(), unit="deg")
print(ra,dec,crd.galactic.l,crd.galactic.b)
src = ArtSource(catalog=cat,
name=src_name,
radec_error=30.0,
ra=item['ra'],
dec=item['dec'],
rate=item['cnts/s'],
flux=item['erg/s/cm^2'],
sign=item['sig'])
src.save()
print('--> Successfully loaded "%s"' % name)
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):
# create sqlalchemy engine
# engine = create_engine("mysql+pymysql://{user}:{pw}@localhost/{db}"
# .format(user="heauser",
# pw="srg2019@L2_heasarc",
# db="heasarc_db"))
cats = ArtCat.objects.all()
cats.delete()
load_gc_table('src.list', "ArtCat GC e04to12keV v1.0", 4.0, 12.0)
load_gc_table('src_10_20.list', "ArtCat GC e10to20keV v1.0", 10.0, 20.0)
load_gc_table('src_20_30.list', "ArtCat GC e20to30keV v1.0", 20.0, 30.0)
hp = HEALPix(nside=NSIDE_SOURCES, order=ORDER, frame=FK5())
# update healpix indexes
srcs = ArtSource.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'))