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

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