srg/srgcat/management/commands/00_load_gyro.py
2024-04-26 12:43:00 +03:00

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