srg/artsurvey/management/commands/02_artsurvey_load_wise.py
2024-04-26 12:43:00 +03:00

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