from django.core.management.base import BaseCommand, CommandError from django.utils import timezone import numpy as np from srglib.utils import slerp, quat_to_pol_and_roll from Quaternion import Quat 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 from astropy.io import fits from django.db.models import Q from datetime import datetime from astropy.time import Time from srgcat.models import SkyMaps, SrgDataDump, Gyro from monthplan.models import SurveyHealpixPlate, Survey from srglib.utils import TZ_UTC, TZ_MSK, load_gyro_file, mission2date import glob import os import logging def find_closest(now, closest_greater_qs, closest_less_qs): try: try: closest_greater = closest_greater_qs[0] except IndexError: closest = closest_less_qs[0] try: closest_less = closest_less_qs[0] except IndexError: closest = closest_greater_qs[0] except IndexError: raise self.model.DoesNotExist("There is no closest object because there are no objects.") print("closest_less:",closest_less.ra,closest_less.dec) print("closest_greater:",closest_greater.ra,closest_greater.dec) delta = (closest_greater.dtime-now).total_seconds()/(closest_greater.dtime-closest_less.dtime).total_seconds() #print((now-closest_greater.dtime).total_seconds()) #print((closest_greater.dtime-closest_less.dtime).total_seconds()) print('delta ',delta) ra = np.interp(delta, [0.0, 1.0], [closest_less.ra, closest_greater.ra]) dec = np.interp(delta, [0.0, 1.0], [closest_less.dec, closest_greater.dec]) #quat = slerp([1,0,0,0], [0,0,0,1], np.arange(0, 1, 0.001)) quat = slerp([closest_less.q2, closest_less.q3, closest_less.q4, closest_less.q1], [closest_greater.q2, closest_greater.q3, closest_greater.q4, closest_greater.q1], [delta]) qfin=Quat(attitude=quat[0]) ra = qfin.ra dec=qfin.dec roll=qfin.roll return ra, dec class Command(BaseCommand): help = 'Initiates data dase' def handle(self, *args, **options): logging.getLogger().setLevel(logging.INFO) gyros = Gyro.objects.all() #print(gyros.count()) #filename='/srg/a1/work/oper/data/2020/srg_20201125_182700/L0/srg_20201125_182700_000_gyro.fits' #load_gyro_file(filename) #now_utc = timezone.now() #survey = Survey.objects.filter(Q(start__lte=now_utc) & Q(stop__gte=now_utc))[0] #closest_greater_qs = survey.surveypath_set.filter(dtime__gt=now_utc).order_by('dtime') #closest_less_qs = survey.surveypath_set.filter(dtime__lt=now_utc).order_by('-dtime') #closest_ra, closest_dec = find_closest(now_utc, closest_greater_qs, closest_less_qs) #print(closest_ra, closest_dec) #path = survey.surveypath_set.all() #print(path.count()) #for p in path: # mjd=Time(p.dtime, format='datetime') # #print(p.dtime,mjd) # break for g in gyros: dtime=Time(mission2date(g.obt), format='datetime').datetime mjd=Time(g.mjd, format='mjd') - 3*u.hour msk=mjd.to_datetime(timezone=TZ_MSK) utc=mjd.to_datetime(timezone=TZ_UTC) try: survey = Survey.objects.filter(Q(start__lte=utc) & Q(stop__gte=utc))[0] except: continue closest_greater_qs = survey.surveypath_set.filter(dtime__gt=utc).order_by('dtime') closest_less_qs = survey.surveypath_set.filter(dtime__lt=utc).order_by('-dtime') try: try: closest_greater = closest_greater_qs[0] except IndexError: closest = closest_less_qs[0] try: closest_less = closest_less_qs[0] except IndexError: closest = closest_greater_qs[0] except IndexError: raise self.model.DoesNotExist("There is no closest object because there are no objects.") closest_ra, closest_dec = find_closest(utc, closest_greater_qs, closest_less_qs) crd_path = SkyCoord(closest_ra, closest_dec, frame="fk5", unit="deg") crd_gyro = SkyCoord(g.ra, g.dec, frame="fk5", unit="deg") print(utc) print(g.ra) print('1 ',closest_greater.dtime) print('1 ',closest_greater.ra) print('2 ',closest_less.dtime) print('2 ',closest_less.ra) print('interp -->',closest_ra) print(crd_gyro.separation(crd_path).arcmin) break self.stdout.write(self.style.SUCCESS('Done'))