197 lines
8.1 KiB
Python
197 lines
8.1 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
|
|
import logging
|
|
import os
|
|
from datetime import datetime
|
|
from astropy.time import Time, TimeDelta, TimezoneInfo, TimeFromEpoch
|
|
from astropy.io import fits
|
|
|
|
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_healpix import HEALPix, neighbours
|
|
|
|
from heasarc.models import HeasarcBase
|
|
from artsurvey.models import ArtSurvey, ArtSurveySource, WiseCounterpart
|
|
from srglib.utils import find_counterparts
|
|
|
|
import numpy.ma as ma
|
|
from django.core.exceptions import ObjectDoesNotExist
|
|
|
|
MJDREF = 51543.875
|
|
TZ_UTC = TimezoneInfo(utc_offset=0*u.hour)
|
|
TZ_MSK = TimezoneInfo(utc_offset=3*u.hour)
|
|
|
|
def load_skymap_sources_wise(filename, survey):
|
|
""" Loads sources cross-matched with eRosita
|
|
|
|
Parameters
|
|
----------
|
|
filename : str
|
|
Absolute path to the file
|
|
|
|
|
|
:Author:
|
|
Roman Krivonos <krivonos@cosmos.ru>
|
|
"""
|
|
logger = logging.getLogger('django')
|
|
|
|
if not os.path.isfile(filename):
|
|
logger.error("File {} does not exist".format(filename))
|
|
return
|
|
|
|
logger.info("Loading sources from {}".format(filename))
|
|
|
|
name = os.path.basename(filename)
|
|
catalog_name = os.path.splitext(name)[0]
|
|
logger.info("Filename {} catalog {}".format(name, catalog_name))
|
|
|
|
|
|
|
|
format_string='srg_%Y%m%d_%H%M%S_000_ps2wf'
|
|
dtime = datetime.strptime(catalog_name[:-4], format_string)
|
|
tm = Time(dtime, format='datetime', scale='utc')
|
|
dt = tm.to_datetime(timezone=TZ_MSK)
|
|
|
|
hdul = fits.open(filename)
|
|
data = hdul[1].data
|
|
hdul.info()
|
|
print(hdul[1].columns)
|
|
|
|
for item in data:
|
|
|
|
try:
|
|
#srcs = ArtSurveySource.objects.filter(name_orig=item['NAME'])
|
|
src = survey.artsurveysource_set.get(name_orig=item['NAME_cl'])
|
|
except Exception as e:
|
|
print("{} failed to load {}".format(item['NAME_cl'],e))
|
|
print("Missed {} cnts {}, flux {}, exptime {}".format(item['NAME_cl'],item['CNTS_cl'],item['FLUX_cl'],item['EXPTIME_cl'],))
|
|
continue
|
|
|
|
|
|
src.wise_data=True
|
|
src.save()
|
|
|
|
w1mag = item['w1mag'] if not (ma.is_masked(item['w1mag']) or item['w1mag'] < 0.0) else None
|
|
w2mag = item['w2mag'] if not (ma.is_masked(item['w2mag']) or item['w2mag'] < 0.0) else None
|
|
dw1mag = item['dw1mag'] if not (ma.is_masked(item['dw1mag']) or item['dw1mag'] < 0.0) else None
|
|
dw2mag = item['dw2mag'] if not (ma.is_masked(item['dw2mag']) or item['dw2mag'] < 0.0) else None
|
|
w1flux = item['w1flux'] if not (ma.is_masked(item['w1flux']) or item['w1flux'] < 0.0) else None
|
|
w2flux = item['w2flux'] if not (ma.is_masked(item['w2flux']) or item['w2flux'] < 0.0) else None
|
|
dw1flux = item['dw1flux'] if not (ma.is_masked(item['dw1flux']) or item['dw1flux'] < 0.0) else None
|
|
dw2flux = item['dw2flux'] if not (ma.is_masked(item['dw2flux']) or item['dw2flux'] < 0.0) else None
|
|
gPSFMag = item['gPSFMag'] if not (ma.is_masked(item['gPSFMag']) or item['gPSFMag'] < 0.0) else None
|
|
iPSFMag = item['iPSFMag'] if not (ma.is_masked(item['iPSFMag']) or item['iPSFMag'] < 0.0) else None
|
|
rPSFMag = item['rPSFMag'] if not (ma.is_masked(item['rPSFMag']) or item['rPSFMag'] < 0.0) else None
|
|
yPSFMag = item['yPSFMag'] if not (ma.is_masked(item['yPSFMag']) or item['yPSFMag'] < 0.0) else None
|
|
zPSFMag = item['zPSFMag'] if not (ma.is_masked(item['zPSFMag']) or item['zPSFMag'] < 0.0) else None
|
|
primaryDetection = True if not (ma.is_masked(item['primaryDetection']) or int(item['primaryDetection']) == 0) else False
|
|
bestDetection = True if not (ma.is_masked(item['bestDetection']) or int(item['bestDetection']) == 0) else False
|
|
|
|
wise = WiseCounterpart(source=src,
|
|
sep=item['sep_cl'],
|
|
objID=item['objID'],
|
|
raStack=item['raStack'],
|
|
decStack=item['decStack'],
|
|
raStackErr=item['raStackErr'],
|
|
decStackErr=item['decStackErr'],
|
|
raMean=item['raMean'],
|
|
decMean=item['decMean'],
|
|
raMeanErr=item['raMeanErr'],
|
|
decMeanErr=item['decMeanErr'],
|
|
objInfoFlag=item['objInfoFlag'],
|
|
qualityFlag=item['qualityFlag'],
|
|
primaryDetection=primaryDetection,
|
|
bestDetection=bestDetection,
|
|
gPSFMag=gPSFMag,
|
|
gPSFMagErr=item['gPSFMagErr'],
|
|
gApMag=item['gApMag'],
|
|
gApMagErr=item['gApMagErr'],
|
|
gKronMag=item['gKronMag'],
|
|
gKronMagErr=item['gKronMagErr'],
|
|
rPSFMag=rPSFMag,
|
|
rPSFMagErr=item['rPSFMagErr'],
|
|
rApMag=item['rApMag'],
|
|
rApMagErr=item['rApMagErr'],
|
|
rKronMag=item['rKronMag'],
|
|
rKronMagErr=item['rKronMagErr'],
|
|
iPSFMag=iPSFMag,
|
|
iPSFMagErr=item['iPSFMagErr'],
|
|
iApMag=item['iApMag'],
|
|
iApMagErr=item['iApMagErr'],
|
|
iKronMag=item['iKronMag'],
|
|
iKronMagErr=item['iKronMagErr'],
|
|
zPSFMag=zPSFMag,
|
|
zPSFMagErr=item['zPSFMagErr'],
|
|
zApMag=item['zApMag'],
|
|
zApMagErr=item['zApMagErr'],
|
|
zKronMag=item['zKronMag'],
|
|
zKronMagErr=item['zKronMagErr'],
|
|
yPSFMag=yPSFMag,
|
|
yPSFMagErr=item['yPSFMagErr'],
|
|
yApMag=item['yApMag'],
|
|
yApMagErr=item['yApMagErr'],
|
|
yKronMag=item['yKronMag'],
|
|
yKronMagErr=item['yKronMagErr'],
|
|
wisefield=item['wisefield'],
|
|
fitext=item['fitext'],
|
|
devaucou=item['devaucou'],
|
|
star=item['star'],
|
|
w1flux=w1flux,
|
|
dw1flux=dw1flux,
|
|
w1mag=w1mag,
|
|
dw1mag=dw1mag,
|
|
w1reff=item['w1reff'],
|
|
w2flux=w2flux,
|
|
dw2flux=dw2flux,
|
|
w2mag=w2mag,
|
|
dw2mag=dw2mag,
|
|
w2reff=item['w2reff'])
|
|
|
|
wise.save()
|
|
|
|
|
|
class Command(BaseCommand):
|
|
help = 'Initiates data dase'
|
|
|
|
def handle(self, *args, **options):
|
|
|
|
survey_version=1.1
|
|
|
|
try:
|
|
survey = ArtSurvey.objects.get(version=survey_version)
|
|
except ArtSurvey.DoesNotExist:
|
|
print("ArtSurvey {} not found".format(survey_version))
|
|
return
|
|
|
|
print("use ArtSurvey {}".format(survey))
|
|
|
|
"""
|
|
srcs = survey.artsurveysource_set.all()
|
|
for src in srcs:
|
|
try:
|
|
src.erositamatch
|
|
except ObjectDoesNotExist:
|
|
continue
|
|
print(src.erositamatch)
|
|
src.erositamatch.delete()
|
|
src.erosita_data=False
|
|
src.save()
|
|
"""
|
|
w = WiseCounterpart.objects.all()
|
|
w.delete()
|
|
|
|
load_skymap_sources_wise("/data/artxc/wise/srg_20200610_191805_000_ps2wf_r40.fits", survey)
|
|
|
|
self.stdout.write(self.style.SUCCESS('Done'))
|