127 lines
3.7 KiB
Python
127 lines
3.7 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, DataDump
|
|
|
|
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
|
|
import math
|
|
|
|
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):
|
|
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)')
|
|
csvfile=INPUT_DATA_DIR+'/'+file
|
|
df = pd.read_csv(csvfile,names=['name', 'path', 'filename', 'tstart','tstop'])
|
|
print(df)
|
|
for i in df.index:
|
|
dd = DataDump()
|
|
dd.start=mission2date(int(df['tstart'][i]), TZ_MSK)
|
|
dd.stop=mission2date(int(df['tstop'][i]), TZ_MSK)
|
|
dd.tstart=int(df['tstart'][i])
|
|
dd.tstop=int(df['tstop'][i])
|
|
dd.name=df['name'][i]
|
|
dd.filename=df['filename'][i]
|
|
dd.path=df['path'][i]
|
|
dd.save()
|
|
observations = Observation.objects.filter(Q(start__gte=dd.start) & Q(start__lte=dd.stop))
|
|
scans = Scan.objects.filter(Q(start__gte=dd.start) & Q(start__lte=dd.stop))
|
|
for observation in observations:
|
|
dd.observations.add(observation)
|
|
for scan in scans:
|
|
dd.scans.add(scan)
|
|
observations = Observation.objects.filter(Q(stop__gte=dd.start) & Q(stop__lte=dd.stop))
|
|
scans = Scan.objects.filter(Q(stop__gte=dd.start) & Q(stop__lte=dd.stop))
|
|
for observation in observations:
|
|
dd.observations.add(observation)
|
|
for scan in scans:
|
|
dd.scans.add(scan)
|
|
dd.save()
|
|
print(mission2date(int(df['tstart'][i]), TZ_MSK))
|
|
print(df['name'][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):
|
|
dds = DataDump.objects.all()
|
|
dds.delete()
|
|
load_data('read_seance.csv')
|
|
print_pz_dt_sec('2019-08-21 22:00:00')
|
|
print_pz_dt_sec('2019-08-21 23:00:00')
|
|
|
|
#validate_flightplan()
|