281 lines
12 KiB
Python
281 lines
12 KiB
Python
from django.core.management.base import BaseCommand, CommandError
|
|
|
|
from datetime import date
|
|
from django.utils import dateparse
|
|
from logbook.models import LogBookPlan, LogBookDay
|
|
from plan.models import INPUT_DATA_DIR
|
|
from plan.models import LaunchDate
|
|
|
|
from monthplan.models import Head, Observation, Seance, Correction, Scan, Survey, FlightPlan, ScanPath
|
|
|
|
from astropy.io import fits
|
|
|
|
from datetime import datetime
|
|
from django.utils import timezone
|
|
|
|
|
|
from astropy.io import fits
|
|
import pandas as pd
|
|
from pandas import ExcelWriter
|
|
from pandas import ExcelFile
|
|
#import xlrd
|
|
from astropy.table import Table
|
|
|
|
import astropy.units as u
|
|
from astropy.time.formats import erfa
|
|
from astropy.time import Time, TimeDelta, TimezoneInfo, TimeFromEpoch
|
|
|
|
from django.db.models import Q
|
|
from math import pi, cos, sin
|
|
from Quaternion import Quat
|
|
from scipy.spatial.transform import Rotation, Slerp
|
|
import numpy as np
|
|
|
|
MJDREF = 51543.875
|
|
TZ_UTC = TimezoneInfo(utc_offset=0*u.hour)
|
|
TZ_MSK = TimezoneInfo(utc_offset=3*u.hour)
|
|
|
|
TIMESTR_FORMAT = '%Y.%m.%d %H:%M:%S'
|
|
|
|
def str2date(timestr, tzone):
|
|
#print(timestr)
|
|
if timestr.find('60') > 0:
|
|
timestr=timestr.replace('60', '00')
|
|
time_raw = datetime.strptime(timestr, TIMESTR_FORMAT)
|
|
time_zoned = time_raw.replace(tzinfo=tzone)
|
|
return time_zoned
|
|
|
|
|
|
def date2mission(dtime):
|
|
mjdref = Time(MJDREF, format='mjd')
|
|
dtime = Time(dtime , format='datetime')
|
|
#print(dtime.mjd)
|
|
return (dtime - mjdref).sec
|
|
|
|
|
|
def mission2date(timesec, tzone):
|
|
mjdref = Time(MJDREF, format='mjd')
|
|
delta = TimeDelta(timesec, format='sec')
|
|
dtime = mjdref + delta + 3*u.hour
|
|
return dtime.to_datetime()
|
|
|
|
|
|
def print_obsplan_dt_sec(dtstr):
|
|
dt = str2date(dtstr, tzone=TZ_MSK)
|
|
ts = date2mission(dt)
|
|
print(dt, '-->', ts, ts/14400)
|
|
|
|
|
|
def print_pz_dt_sec(dtstr):
|
|
dt = str2date(dtstr, tzone=TZ_UTC)
|
|
ts = date2mission(dt)
|
|
|
|
print(dt, '-->', ts)
|
|
|
|
|
|
def quat_to_pol_and_roll(qfin):
|
|
"""
|
|
it is assumed that quaternion is acting on the sattelite coordinate system
|
|
in order to orient in in icrs coordinates
|
|
opaxis - define dirrection of the main axis (x axis [1, 0, 0] coinside with optical axis)
|
|
we assume that north is oriented along z coordinate, we also name this coordinate
|
|
north for detectors
|
|
"""
|
|
opaxis=[1, 0, 0]
|
|
north=[0, 0, 1]
|
|
opticaxis = qfin.apply(opaxis)
|
|
print(opticaxis)
|
|
dec = np.arctan(opticaxis[2]/np.sqrt(opticaxis[1]**2 + opticaxis[0]**2))
|
|
ra = np.arctan2(opticaxis[1], opticaxis[0])%(2.*pi)
|
|
print(ra/pi*180,dec/pi*180)
|
|
return
|
|
yzprojection = np.cross(opticaxis, north)
|
|
vort = np.cross(north, opaxis)
|
|
|
|
rollangle = np.arctan2(np.sum(yzprojection*qfin.apply(vort), axis=1),
|
|
np.sum(yzprojection*qfin.apply(north), axis=1))
|
|
print(ra, dec, rollangle)
|
|
return ra, dec, rollangle
|
|
|
|
def logic(index,nskip):
|
|
if index % nskip == 0:
|
|
return False
|
|
return True
|
|
|
|
def load_data(file,obsid,nskip):
|
|
print('Load data for ',obsid)
|
|
try:
|
|
scan=Scan.objects.get(experiment__exact=obsid)
|
|
except:
|
|
print("This scan is not found ",obsid)
|
|
try:
|
|
scans=Scan.objects.filter(experiment__exact=obsid)
|
|
except:
|
|
print("Multiple scans were also not found ",obsid)
|
|
print('Remove some of the invalid scans below:')
|
|
for scan in scans:
|
|
print(scan.experiment,scan.start,scan.stop,scan.head)
|
|
return
|
|
|
|
# remove all attached ScanPath to this scan:
|
|
spath=scan.scanpath_set.all()
|
|
spath.delete()
|
|
|
|
csvfile=INPUT_DATA_DIR+'/ARJ-SCAN/'+file
|
|
df = pd.read_csv(csvfile,names=['date', 'time', 'q1', 'q2','q3','q4','dummy'], header=None, delim_whitespace=True, skipfooter=1, skiprows = lambda x: logic(x, nskip))
|
|
print(df)
|
|
for i in df.index:
|
|
dtstr="%s %s" % (df['date'][i], df['time'][i])
|
|
dt = str2date(dtstr, tzone=TZ_MSK)
|
|
ts = date2mission(dt)
|
|
eroday=ts/14400
|
|
dtime = Time(dt , format='datetime')
|
|
mjd=dtime.mjd
|
|
q1=df['q1'][i]
|
|
q2=df['q2'][i]
|
|
q3=df['q3'][i]
|
|
q4=df['q4'][i]
|
|
quat=Quat(attitude=[q2,q3,q4,q1])
|
|
sp=ScanPath(scan=scan,dtime=dt,mjd=mjd,obt=ts,eroday=eroday,q1=q1,q2=q2,q3=q3,q4=q4,ra=quat.ra,dec=quat.dec,roll=quat.roll)
|
|
sp.save()
|
|
pass
|
|
|
|
class Command(BaseCommand):
|
|
help = 'Initiates data base'
|
|
|
|
# def add_arguments(self, parser):
|
|
# parser.add_argument('poll_id', nargs='+', type=int)
|
|
|
|
def handle(self, *args, **options):
|
|
# note: delete 00003017001 scan from August plan
|
|
"""
|
|
load_data('kvater01-09_02_15_00.rez','00003017001')
|
|
load_data('kvater01-09_10_17_58.rez','00003017002')
|
|
load_data('kvater01-10_01_40_00.rez','00003044001')
|
|
load_data('kvater02-09_02_40_00.rez','00003031001')
|
|
load_data('kvater02-09_10_42_58.rez','00003031002')
|
|
load_data('kvater02-10_01_10-00.rez','00003045001')
|
|
load_data('kvater03-09_04_06_00.rez','00003018001')
|
|
load_data('kvater03-09_11_22_58.rez','00003018002')
|
|
load_data('kvater03-11_05_25_50.rez','30000700100')
|
|
load_data('kvater04-09_04_06_00.rez','00003019001')
|
|
load_data('kvater04-09_11_22_58.rez','00003019002')
|
|
load_data('kvater04-11_07_05_52.rez','30000800100')
|
|
load_data('kvater05-09_04_06_00.rez','00003020001')
|
|
load_data('kvater05-09_11_22_58.rez','00003020002')
|
|
load_data('kvater05-11_08_45_54.rez','30000900100')
|
|
load_data('kvater06-09_04_06_00.rez','00003021001')
|
|
load_data('kvater06-09_11_22_58.rez','00003021002')
|
|
load_data('kvater06-11_10_25_56.rez','30001000100')
|
|
load_data('kvater07-09_04_06_00.rez','00003022001')
|
|
load_data('kvater07-09_11_22_58.rez','00003022002')
|
|
load_data('kvater08-09_01_40_00.rez','00003023001')
|
|
load_data('kvater08-10_19_11_10.rez','30000500100')
|
|
load_data('kvater09-09_01_40_00.rez','00003024001')
|
|
load_data('kvater09-10_12_20_02.rez','30000600100')
|
|
load_data('kvater10-09_01_30_00.rez','00003025001')
|
|
load_data('kvater11-09_01_40_00.rez','00003026001')
|
|
load_data('kvater12-09_04_06_00.rez','00003027001')
|
|
load_data('kvater12-09_11_22_58.rez','00003027002')
|
|
load_data('kvater13-09_04_06_00.rez','00003028001')
|
|
load_data('kvater13-09_11_22_58.rez','00003028002')
|
|
load_data('kvater13-10_08_59_10.rez','50000600100')
|
|
load_data('kvater13-10_23_48_18.rez','50000700100')
|
|
load_data('kvater14-08_12_50_00.rez','00003021001')
|
|
load_data('kvater14-09_04_06_00.rez','00003029001')
|
|
load_data('kvater14-09_11_22_58.rez','00003029002')
|
|
load_data('kvater15-09_03_03_20.rez','70004000100')
|
|
load_data('kvater15-10_19_52_56.rez','50000800100')
|
|
load_data('kvater16-10_10_42_04.rez','50000900100')
|
|
load_data('kvater17-08_02_00_00.rez','00003001001')
|
|
load_data('kvater17-08_11_01_00.rez','00003002001')
|
|
load_data('kvater17-08_22_10_00.rez','00003003001')
|
|
load_data('kvater17-09_04_06_00.rez','00003032001')
|
|
load_data('kvater17-09_11-22_58.rez','00003032002')
|
|
load_data('kvater18-08_03_58_19.rez','00003003002')
|
|
load_data('kvater18-08_09_46_38.rez','00003003003')
|
|
load_data('kvater18-08_22_10_00.rez','00003004001')
|
|
load_data('kvater18-09_04_06_00.rez','00003033001')
|
|
load_data('kvater18-09_11_22_58.rez','00003033002')
|
|
load_data('kvater18-10_03_16_32.rez','30001600100')
|
|
load_data('kvater19-08_01_38_28.rez','00003004002')
|
|
load_data('kvater19-08_05_06_56.rez','00003004003')
|
|
load_data('kvater19-08_08_35_24.rez','00003004004')
|
|
load_data('kvater19-08_12_03_52.rez','00003004005')
|
|
load_data('kvater19-08_22_10_00.rez','00003005001')
|
|
load_data('kvater19-09_01_40_00.rez','00003034001')
|
|
load_data('kvater20-08_01_29_18.rez','00003005002')
|
|
load_data('kvater20-08_06_48_36.rez','00003005003')
|
|
load_data('kvater20-08_11_07_54.rez','00003005004')
|
|
load_data('kvater20-08_22_10_00.rez','00003006001')
|
|
load_data('kvater20-09_01_40_00.rez','00003035001')
|
|
load_data('kvater20-09_06_18_00.rez','00003036001')
|
|
load_data('kvater20-09_10_56_00.rez','00003037001')
|
|
load_data('kvater21-08_02_29_18.rez','00003006002')
|
|
load_data('kvater21-08_06_48_36.rez','00003006003')
|
|
load_data('kvater21-08_11_07_54.rez','00003006004')
|
|
load_data('kvater21-09_01_27_00.rez','00003030001')
|
|
load_data('kvater21-09_08_43_58.rez','00003030002')
|
|
load_data('kvater22-08_22_10_00.rez','00003007001')
|
|
load_data('kvater23-08_01_38_28.rez','00003007002')
|
|
load_data('kvater23-08_05_06_56.rez','00003007003')
|
|
load_data('kvater23-08_08_35_24.rez','00003007004')
|
|
load_data('kvater23-08_12_03_52.rez','00003007005')
|
|
load_data('kvater23-08_22_10_00.rez','00003008001')
|
|
load_data('kvater24-08_02_47_38.rez','00003008002')
|
|
load_data('kvater24-08_07_25_16.rez','00003008003')
|
|
load_data('kvater24-08_12_02_54.rez','00003008004')
|
|
load_data('kvater24-08_22_10_00.rez','00003009001')
|
|
load_data('kvater24-09_03_30_00.rez','00003041001')
|
|
load_data('kvater24-09_11_07_09.rez','00003041001')
|
|
load_data('kvater24-09_13_05_00.rez','00003042001')
|
|
load_data('kvater24-09_15_02_09.rez','00003042002')
|
|
load_data('kvater25-08_02_47_38.rez','00003009002')
|
|
load_data('kvater25-08_07_25_16.rez','00003009003')
|
|
load_data('kvater25-08_12_02_54.rez','00003009004')
|
|
load_data('kvater25-08_22_10_00.rez','00003010001')
|
|
load_data('kvater25-09_01_40_00.rez','00003038001')
|
|
load_data('kvater26-08_02_47_38.rez','00003010002')
|
|
load_data('kvater26-08_12_02_54.rez','00003010004')
|
|
load_data('kvater26-08_23_40_00.rez','00003011001')
|
|
load_data('kvater26-09_01_40_00.rez','00003039001')
|
|
load_data('kvater26_08_07_25_16.rez','00003010003')
|
|
load_data('kvater27-08_04_17_38.rez','00003011002')
|
|
load_data('kvater27-08_08_55_16.rez','00003011003')
|
|
load_data('kvater27-08_13_32_54.rez','00003011004')
|
|
load_data('kvater27-08_23_40_00.rez','00003012001')
|
|
load_data('kvater27-09_01_40_00.rez','00003040001')
|
|
load_data('kvater28-08_04_17_38.rez','00003012002')
|
|
load_data('kvater28-08_08_55_16.rez','00003012003')
|
|
load_data('kvater28-08_13_32_54.rez','00003012004')
|
|
load_data('kvater28-08_23_40_00.rez','00003013001')
|
|
load_data('kvater28-09_01_40_00.rez','00003043001')
|
|
load_data('kvater29-08_04_17_38.rez','00003013002')
|
|
load_data('kvater29-08_08_55_16.rez','00003013003')
|
|
load_data('kvater30-08_02_40_00.rez','00003015001')
|
|
load_data('kvater30-08_10_42_58.rez','00003015002')
|
|
load_data('kvater31-08_02_40_00.rez','00003016001')
|
|
load_data('kvater31-08_10_42_58.rez','00003016002')
|
|
load_data('kvater12-11_03_04_38.rez','50001500100')
|
|
load_data('kvater12-11_21_50_31.rez','50001600100')
|
|
load_data('kvater13-11_11_06_34.rez','50001700100')
|
|
load_data('kvater14-11_00_22_37.rez','50001800100')
|
|
load_data('kvater16-11_07_42_50.rez','50001900100')
|
|
load_data('kvater16-11_16_47_48.rez','50002000100')
|
|
"""
|
|
|
|
"""
|
|
load_data('70019900100.iki','70019900100')
|
|
load_data('70020000100.iki','70020000100')
|
|
"""
|
|
|
|
load_data('70020100100.iki','70020100100',10)
|
|
load_data('20191204_041000_70020200100.iki','70020200100',10)
|
|
load_data('20191204_134001_50002600100.iki','50002600100',10)
|
|
load_data('20191205_005349_50002700100.iki','50002700100',10)
|
|
load_data('20191205_120737_50002800100.iki','50002800100',10)
|
|
load_data('20191205_232125_50002900100.iki','50002900100',10)
|
|
load_data('20191206_103513_50003000100.iki','50003000100',10)
|
|
load_data('20191207_071532_70020400100.iki','70020400100',10)
|
|
load_data('20191206_222021_70020300100.iki','70020300100',10)
|