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