128 lines
3.6 KiB
Python
128 lines
3.6 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
|
|
|
|
from astropy.io import fits
|
|
|
|
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 math
|
|
|
|
import astropy.units as u
|
|
from astropy.time.formats import erfa
|
|
from astropy.time import Time, TimeDelta, TimezoneInfo, TimeFromEpoch
|
|
from datetime import datetime
|
|
|
|
MJDREF = 51543.875
|
|
TZ_UTC = TimezoneInfo(utc_offset=0*u.hour)
|
|
TZ_MSK = TimezoneInfo(utc_offset=3*u.hour)
|
|
|
|
# 2019-08-01T02:28:00+03:00
|
|
TIMESTR_FORMAT = '%Y-%m-%dT%H:%M:%S+03:00'
|
|
|
|
def str2date(timestr, tzone):
|
|
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')
|
|
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)
|
|
|
|
def print_pz_dt_sec(dtstr):
|
|
dt = str2date(dtstr, tzone=TZ_UTC)
|
|
ts = date2mission(dt)
|
|
print(dt, '-->', ts)
|
|
|
|
def load_data(file):
|
|
print('Load data (dummy)')
|
|
fitsfile=INPUT_DATA_DIR+'/'+file
|
|
table = Table.read(fitsfile)
|
|
df = table.to_pandas()
|
|
print("Column headings:")
|
|
print(df.columns.str.encode('utf-8'))
|
|
hdul = fits.open(fitsfile)
|
|
hdul.info()
|
|
for i in df.index:
|
|
dtstr=df['START'][i].decode().strip()
|
|
dt = str2date(dtstr, tzone=TZ_MSK)
|
|
start_ts = date2mission(dt)
|
|
|
|
dtstr=df['STOP'][i].decode().strip()
|
|
dt = str2date(dtstr, tzone=TZ_MSK)
|
|
stop_ts = date2mission(dt)
|
|
#print(dt, '-->', ts)
|
|
|
|
obs=FlightPlan()
|
|
obs.start=df['START'][i].decode().strip()
|
|
obs.stop=df['STOP'][i].decode().strip()
|
|
obs.experiment=df['EXPERIMENT'][i].decode().strip()
|
|
obs.ra=df['RA'][i]
|
|
obs.dec=df['DEC'][i]
|
|
obs.q1=df['Q1'][i]
|
|
obs.q2=df['Q2'][i]
|
|
obs.q3=df['Q3'][i]
|
|
obs.q4=df['Q4'][i]
|
|
obs.start_npol = df['START_NPOL'][i].decode().strip()
|
|
obs.stop_npol = df['STOP_NPOL'][i].decode().strip()
|
|
obs.load_stamp = df['LOAD_STAMP'][i].decode().strip()
|
|
obs.mjd_start = df['MJD_START'][i]
|
|
obs.mjd_stop = df['MJD_STOP'][i]
|
|
obs.obt_start = start_ts # df['OBT_START'][i]
|
|
obs.obt_stop = stop_ts # df['OBT_STOP'][i]
|
|
obs.save()
|
|
print(df['EXPERIMENT'][i])
|
|
pass
|
|
|
|
def validate_flightplan():
|
|
list = FlightPlan.objects.all()
|
|
for pz in list:
|
|
if (pz.experiment == '00000000000' and pz.valid == True):
|
|
pz.valid = False
|
|
pz.save()
|
|
continue
|
|
first = FlightPlan.objects.filter(experiment__exact=pz.experiment).order_by("-load_stamp")[0]
|
|
first.valid = True
|
|
first.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):
|
|
pz = FlightPlan.objects.all()
|
|
pz.delete()
|
|
load_data('pz.fits')
|
|
validate_flightplan()
|