145 lines
5.3 KiB
Python
145 lines
5.3 KiB
Python
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'))
|