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