more apps

This commit is contained in:
2024-04-26 12:43:00 +03:00
parent 52b209b176
commit 69a2160eb7
536 changed files with 33118 additions and 0 deletions

View File

@@ -0,0 +1,29 @@
from django.core.management.base import BaseCommand, CommandError
from django.contrib.auth.models import User
from django.core import mail
from django.template.loader import render_to_string
from django.utils.html import strip_tags
from django.core.mail import send_mail
import time
import re
import glob
import logging
from monthplan.utils import load_surveypath_data
class Command(BaseCommand):
help = 'Initiates data base'
def handle(self, *args, **options):
logging.getLogger().setLevel(logging.INFO)
path = "/export/django/srg/data/npol/DMV/ARJ-SCAN/20??????_??????_???????????.iki"
ikifiles = []
for file in glob.glob(path):
ikifiles.append(file)
for file in ikifiles:
load_surveypath_data(file,100,notify=True)

View File

@@ -0,0 +1,76 @@
from django.core.management.base import BaseCommand, CommandError
from django.contrib.auth.models import User
from django.core import mail
from django.template.loader import render_to_string
from django.utils.html import strip_tags
from django.core.mail import send_mail
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
from watchdog.events import PatternMatchingEventHandler
class MyHandler(PatternMatchingEventHandler):
patterns = ["*gyro.fits",]
def process(self, event):
"""
event.event_type
'modified' | 'created' | 'moved' | 'deleted'
event.is_directory
True | False
event.src_path
path/to/observed/file
"""
# the file will be processed there
if not event.event_type == 'created':
return
print("Reading {} ty[e: {}".format(event.src_path, event.event_type))
#if not 'L1b' in event.src_path:
# return
users = User.objects.filter(groups__name='srg-artxc-survey')
to_emails=[]
for user in users:
to_emails.append(user.email)
print (event.src_path, event.event_type) # print now only for degug
count=1
subject = "New SRG data"
html_message = render_to_string('monthplan/data_loaded_email.html', {'event':event, 'count':count})
plain_message = strip_tags(html_message)
from_email = 'Roman Krivonos <krivonos@cosmos.ru>'
mail.send_mail(subject, plain_message, from_email, ['krivonos@cosmos.ru','kate@cosmos.ru',], html_message=html_message)
def on_modified(self, event):
self.process(event)
def on_created(self, event):
self.process(event)
class EventHandler(FileSystemEventHandler):
def on_created(self, event):
print (event)
class Command(BaseCommand):
help = 'Initiates data base'
def handle(self, *args, **options):
path = "/srg/work/oper/data/2020/"
observer = Observer()
observer.schedule(MyHandler(), path, recursive=True)
observer.start()
try:
while True:
time.sleep(10)
except KeyboardInterrupt:
observer.stop()
observer.join()

View File

@@ -0,0 +1,19 @@
from django.core.management.base import BaseCommand, CommandError
from datetime import date
from logbook.models import LogBookDay
from plan.models import INPUT_DATA_DIR
from plan.models import LaunchDate
import datetime
from django.utils import timezone
import astropy
import pandas as pd
class Command(BaseCommand):
help = 'Initiates data dase'
# def add_arguments(self, parser):
# parser.add_argument('poll_id', nargs='+', type=int)
def handle(self, *args, **options):
self.stdout.write(self.style.SUCCESS('Successfully initiated "%s"' % 100))

View File

@@ -0,0 +1,123 @@
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
from monthplan.utils import load_monthplan_fits, load_monthplan_dir
from astropy.io import fits
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 math
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()
head=Head()
head.start=hdul[1].header['START']
head.stop=hdul[1].header['STOP']
head.gentime=hdul[1].header['GENTIME']
head.version=hdul[1].header['VERSION']
head.author=hdul[1].header['AUTHOR']
head.file=file
head.nrows=df.shape[0]
head.save()
for i in df.index:
row=(i+1)
if(df['TYPE'][i].decode().strip() == 'SEANCE'):
print('SEA')
print(df['START'][i].decode().strip())
seance=Seance(head=head, row=row)
seance.start=df['START'][i].decode().strip()
seance.stop=df['STOP'][i].decode().strip()
seance.stations=df['STATIONS'][i].decode().strip()
seance.guid=df['GUID'][i].decode().strip()
seance.save()
if(df['TYPE'][i].decode().strip() == 'OBSERVATION'):
obs=Observation(head=head, row=row)
obs.start=df['START'][i].decode().strip()
obs.stop=df['STOP'][i].decode().strip()
obs.target=df['TARGET'][i].decode().strip()
obs.experiment=df['EXPERIMENT'][i].decode().strip()
obs.ra=df['RA'][i]
obs.dec=df['DEC'][i]
obs.ra=df['RA'][i]
obs.roll_angle=df['ROLL_ANGLE'][i]
obs.sun_xoz_angle=df['SUN_XOZ_ANGLE'][i]
obs.guid=df['GUID'][i].decode().strip()
obs.save()
if(df['TYPE'][i].decode().strip() == 'CORRECTION'):
cor=Correction(head=head, row=row)
cor.start=df['START'][i].decode().strip()
cor.stop=df['STOP'][i].decode().strip()
cor.impstart=df['IMPSTART'][i].decode().strip()
cor.guid=df['GUID'][i].decode().strip()
cor.save()
if(df['TYPE'][i].decode().strip() == 'SCAN'):
print('SCAN')
scan=Scan(head=head, row=row)
scan.start=df['START'][i].decode().strip()
scan.stop=df['STOP'][i].decode().strip()
scan.target=df['TARGET'][i].decode().strip()
scan.experiment=df['EXPERIMENT'][i].decode().strip()
scan.ra=df['RA'][i]
scan.dec=df['DEC'][i]
scan.roll_angle=df['ROLL_ANGLE'][i]
scan.sun_xoz_angle=df['SUN_XOZ_ANGLE'][i]
scan.template=int(df['TEMPLATE'][i].decode().strip())
scan.guid=df['GUID'][i].decode().strip()
scan.save()
if(df['TYPE'][i].decode().strip() == 'SURVEY'):
sur=Scan(head=head, row=row)
sur.start=df['START'][i].decode().strip()
sur.stop=df['STOP'][i].decode().strip()
sur.target=df['TARGET'][i].decode().strip()
sur.experiment=df['EXPERIMENT'][i].decode().strip()
sur.ra_p=df['RA_P'][i]
sur.dec_p=df['DEC_P'][i]
sur.ra_z0=df['RA_Z0'][i]
sur.dec_z0=df['DEC_Z0'][i]
sur.ra_zk=df['RA_ZK'][i]
sur.dec_zk=df['DEC_ZK'][i]
sur.z_speed=df['Z_SPEED'][i]
sur.guid=df['GUID'][i].decode().strip()
sur.save()
#myplan = LogBookPlan(daynumber=myday.daynumber, description=df['plan'][i], date=df['date'][i])
#myplan.save()
#myday.plan.add(myplan)
#myday.save()
print(df['TYPE'][i])
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):
#load_data('RG_MonthPlan_2019-07_v08.fits')
#load_data('RG_MonthPlan_2019-08_v14.fits')
#load_monthplan_fits('/export/django/srg/data/npol/fits/RG_MonthPlan_2020-06_v07.fits')
load_monthplan_dir('/export/django/srg/data/npol/fits')
self.stdout.write(self.style.SUCCESS("Done"))

View File

@@ -0,0 +1,127 @@
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()

View File

@@ -0,0 +1,126 @@
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()

View File

@@ -0,0 +1,239 @@
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, SurveyPath
from monthplan.models import SurveyHealpixPlate, NSIDE_PLATES, ORDER
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
from srglib.utils import slerp, quat_to_pol_and_roll
import math
from Quaternion import Quat
from os import listdir
from astropy_healpix import HEALPix
from astropy import units as u
from astropy.coordinates import SkyCoord, RangeError
from astropy.coordinates import ICRS, Galactic, FK5
from astropy.coordinates import Angle
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')
#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
"""
# Skip rows from based on condition like skip every 3rd line
usersDf = pd.read_csv('users.csv', skiprows= lambda x: logic(x) )
print('Contents of the Dataframe created by skipping every 3rd row from csv file ')
print(usersDf)
"""
def load_data(file,obsid,nskip):
print("Load data for %s" % file)
try:
survey=Survey.objects.get(experiment__exact=obsid)
except:
print("This survey is not found")
return
# remove all attached SurveyPath to this survey:
spath=survey.surveypath_set.all()
spath.delete()
csvfile=INPUT_DATA_DIR+'/'+file
df = pd.read_csv(csvfile,names=['date', 'time', 'q1', 'q2','q3','q4','dummy'], header=None, delim_whitespace=True, skipfooter=1, engine='python', skiprows = lambda x: logic(x, nskip))
tolerance = 10.0
hp = HEALPix(nside=NSIDE_PLATES, order=ORDER, frame=FK5())
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=SurveyPath(survey=survey,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()
print('Mark SurveyHealpixPlate')
surveypaths = survey.surveypath_set.all()
for i in range(len(surveypaths)-1):
delta=(surveypaths[i+1].dtime-surveypaths[i].dtime).total_seconds()
if(abs(int(delta)) > tolerance):
nstep = int(abs(delta) / tolerance)
delta_arr = np.linspace(0,1,nstep)
quat = slerp([surveypaths[i].q2, surveypaths[i].q3, surveypaths[i].q4, surveypaths[i].q1],
[surveypaths[i+1].q2, surveypaths[i+1].q3, surveypaths[i+1].q4, surveypaths[i+1].q1],
delta_arr)
for q in quat:
qfin=Quat(attitude=q)
crd = SkyCoord(qfin.ra, qfin.dec, frame="fk5", unit="deg")
heal = hp.skycoord_to_healpix(crd)
try:
plate = SurveyHealpixPlate.objects.get(healpix=heal)
except:
print('Error: SurveyHealpixPlate not found, run ./manage.py init_survey_healpix_plates first')
break
queryset = survey.surveyhealpixplate_set.all()
if not queryset.filter(pk=plate.pk).exists():
plate.survey.add(survey)
plate.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):
"""
load_data('ARJ-SCAN/kvater22_23-09.rez','10000000100',100)
load_data('ARJ-SCAN/kvater23_24-09.rez','10000000200',100)
load_data('ARJ-SCAN/kvater14-11_13_35_00.rez','10000100100',100)
load_data('ARJ-SCAN/kvater15-11_14_35_00.rez','10000100200',100)
load_data('ARJ-SCAN/20191203_150000_10000200100.iki','10000200100',100)
load_data('ARJ-SCAN/20191208_170000_10000300100.iki','10000300100',100)
load_data('ARJ-SCAN/20191210_223000_10000400100.iki','10000400100',100)
load_data('ARJ-SCAN/20191212_003000_11000000100.iki','11000000100',100)
load_data('ARJ-SCAN/20191217_003000_11000000200.iki','11000000200',100)
load_data('ARJ-SCAN/20191222_003000_11000000300.iki','11000000300',100)
load_data('ARJ-SCAN/20191227_003000_11000000400.iki','11000000400',100)
load_data('ARJ-SCAN/20200101_003000_11000000500.iki','11000000500',100)
"""
""" Jan 2020 """
"""
load_data('ARJ-SCAN/20200102_163000_11000100100.iki','11000100100',1)
load_data('ARJ-SCAN/20200106_163000_11000100200.iki','11000100200',100)
load_data('ARJ-SCAN/20200110_163000_11000100300.iki','11000100300',100)
load_data('ARJ-SCAN/20200114_163000_11000100400.iki','11000100400',100)
load_data('ARJ-SCAN/20200118_163000_11000100500.iki','11000100500',100)
load_data('ARJ-SCAN/20200122_163000_11000100600.iki','11000100600',100)
load_data('ARJ-SCAN/20200126_163000_11000100700.iki','11000100700',100)
load_data('ARJ-SCAN/20200130_220000_11000200100.iki','11000200100',100)
"""
""" Feb 2020 """
#load_data('ARJ-SCAN/20200202_220000_11000300100.iki','11000300100',100)
#load_data('ARJ-SCAN/20200206_220000_11000300200.iki','11000300200',100)
#load_data('ARJ-SCAN/20200210_220000_11000300300.iki','11000300300',100)
#load_data('ARJ-SCAN/20200214_220000_11000400100.iki','11000400100',100)
load_data('ARJ-SCAN/20200218_220000_11000400200.iki','11000400200',100)
load_data('ARJ-SCAN/20200222_220000_11000400300.iki','11000400300',100)
load_data('ARJ-SCAN/20200226_220000_11000400400.iki','11000400400',100)
# invalid after eRosita reset
#load_data('ARJ-SCAN/20200214_220000_11000300400.iki','11000300400',100)
#load_data('ARJ-SCAN/20200218_220000_11000300500.iki','11000300500',100)
#load_data('ARJ-SCAN/20200222_220000_11000300600.iki','11000300600',100)
#load_data('ARJ-SCAN/20200226_220000_11000300700.iki','11000300700',100)

View File

@@ -0,0 +1,181 @@
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, SurveyPath
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):
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 (dummy)')
try:
survey=Survey.objects.get(experiment__exact=obsid)
except:
print("This survey is not found")
return
# remove all attached SurveyPath to this survey:
spath=survey.surveypath_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=SurveyPath(survey=survey,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):
load_data('kvater22_23-09.rez','10000000100',50)
load_data('kvater23_24-09.rez','10000000200',50)
load_data('kvater14-11_13_35_00.rez','10000100100',50)
load_data('kvater15-11_14_35_00.rez','10000100200',50)
load_data('20191203_150000_10000200100.iki','10000200100',50)
load_data('20191208_170000_10000300100.iki','10000300100',50)
load_data('20191210_223000_10000400100.iki','10000400100',50)
load_data('20191212_003000_11000000100.iki','11000000100',50)
return
#
# Experiments:
#
# .407947163597554
# .826585167542578 ! 327.89199999
# -.077996859000543 ! -34.35000000
# -.379805953741339 ! .000
print('327.89199999 -34.35000000')
arr=[.826585167542578, -.077996859000543, -.379805953741339, .407947163597554]
#qfin = Rotation.from_quat(arr)
#qfin = Rotation.from_quat([0, 0, np.sin(np.pi/4), np.cos(np.pi/4)])
#print(qfin.as_euler('zyx', degrees=True))
#qadd=Rotation([0, 0, 0, 1])
#qfin=Rotation(arr)
#a = quat_to_pol_and_roll(qfin)
#print(a)
#print_obsplan_dt_sec('2019.10.16 10:42:04')
#print_obsplan_dt_sec('2019.10.17 00:47:42')
# # print_pz_dt_sec('2019.08.21 23:00:00')
print('***')
quat = Quat(attitude=arr)
print(quat.ra, quat.dec, quat.roll)
#validate_flightplan()

View File

@@ -0,0 +1,280 @@
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)

View File

@@ -0,0 +1,36 @@
from django.core.management.base import BaseCommand, CommandError
from monthplan.models import SurveyHealpixPlate, NSIDE_PLATES, ORDER
from os import listdir
from astropy_healpix import HEALPix
from astropy import units as u
from astropy.coordinates import SkyCoord, RangeError
from astropy.coordinates import ICRS, Galactic, FK5
from astropy.coordinates import Angle
def init_healpix_plates(nside, order):
hp = HEALPix(nside=nside, order=order, frame=FK5())
print("Make Healpix Plates",hp.npix,hp.pixel_area.value,hp.pixel_resolution.value)
try:
print('Delete existing Healpix Plates')
plates = SurveyHealpixPlate.objects.all()
plates.delete()
except:
print('Abort')
exit()
for heal in range(hp.npix):
sc = hp.healpix_to_skycoord(heal)
plate = SurveyHealpixPlate(healpix=heal, ra=float(sc.ra.degree), dec=float(sc.dec.degree))
plate.save()
pass
class Command(BaseCommand):
def handle(self, *args, **options):
init_healpix_plates(NSIDE_PLATES, ORDER)

View File

@@ -0,0 +1,46 @@
from django.core.management.base import BaseCommand, CommandError
from monthplan.models import SurveyHealpixPlate, SurveyHealpixSubPlate, NSIDE_PLATES, NSIDE_SUBPLATES, ORDER
from os import listdir
from astropy_healpix import HEALPix
from astropy import units as u
from astropy.coordinates import SkyCoord, RangeError
from astropy.coordinates import ICRS, Galactic, FK5
from astropy.coordinates import Angle
def init_healpix_sub_plates(nside_plates, nside_subplates, order):
hp_plates = HEALPix(nside=nside_plates, order=order, frame=FK5())
hp_subplates = HEALPix(nside=nside_subplates, order=order, frame=FK5())
print("Make Healpix Plates",hp_plates.npix,hp_plates.pixel_area.value,hp_plates.pixel_resolution.value)
print("Make Healpix SubPlates",hp_subplates.npix,hp_subplates.pixel_area.value,hp_subplates.pixel_resolution.value)
try:
print('Delete existing Healpix Plates')
subplates = SurveyHealpixSubPlate.objects.all()
subplates.delete()
except:
print('Abort')
exit()
for heal in range(hp_subplates.npix):
sc = hp_subplates.healpix_to_skycoord(heal)
crd = SkyCoord(float(sc.ra.degree), float(sc.dec.degree), frame="fk5", unit="deg")
heal = hp_plates.skycoord_to_healpix(crd)
try:
plate = SurveyHealpixPlate.objects.get(healpix=heal)
except:
print('Error: SurveyHealpixPlate not found, run ./manage.py init_survey_healpix_plates first')
return
subplate = SurveyHealpixSubPlate(healpix=heal, ra=float(sc.ra.degree), dec=float(sc.dec.degree), plate=plate)
subplate.save()
pass
class Command(BaseCommand):
def handle(self, *args, **options):
init_healpix_sub_plates(NSIDE_PLATES, NSIDE_SUBPLATES, ORDER)

View File

@@ -0,0 +1,54 @@
from django.core.management.base import BaseCommand, CommandError
from monthplan.models import SurveyHealpixPlate, NSIDE_PLATES, ORDER, MAPS_DIR, Survey, SurveyPath
from os import listdir
from astropy_healpix import HEALPix
from astropy import units as u
from astropy.coordinates import SkyCoord, RangeError
from astropy.coordinates import ICRS, Galactic, FK5
from astropy.coordinates import Angle
import numpy as np
from srglib.utils import slerp, quat_to_pol_and_roll
import math
from Quaternion import Quat
class Command(BaseCommand):
def handle(self, *args, **options):
tolerance = 10.0
hp = HEALPix(nside=NSIDE_PLATES, order=ORDER, frame=FK5())
surveys=Survey.objects.all()
for survey in surveys:
print(survey.experiment)
surveypaths = survey.surveypath_set.all()
for i in range(len(surveypaths)-1):
delta=(surveypaths[i+1].dtime-surveypaths[i].dtime).total_seconds()
if(abs(int(delta)) > tolerance):
nstep = int(abs(delta) / tolerance)
delta_arr = np.linspace(0,1,nstep)
quat = slerp([surveypaths[i].q2, surveypaths[i].q3, surveypaths[i].q4, surveypaths[i].q1],
[surveypaths[i+1].q2, surveypaths[i+1].q3, surveypaths[i+1].q4, surveypaths[i+1].q1],
delta_arr)
for q in quat:
qfin=Quat(attitude=q)
crd = SkyCoord(qfin.ra, qfin.dec, frame="fk5", unit="deg")
heal = hp.skycoord_to_healpix(crd)
try:
plate = SurveyHealpixPlate.objects.get(healpix=heal)
except:
print('Error: SurveyHealpixPlate not found, run ./manage.py init_survey_healpix_plates first')
break
queryset = survey.surveyhealpixplate_set.all()
if not queryset.filter(pk=plate.pk).exists():
plate.survey.add(survey)
plate.save()

View File

@@ -0,0 +1,91 @@
from django.core.management.base import BaseCommand, CommandError
from datetime import datetime as dt
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 srglib.utils import make_source_name
from monthplan.models import Head, Observation, Seance, Correction, Scan, Survey, FlightPlan
from astropy.io import fits
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 math
from django.db.models import Q
def find_closest(now, closest_greater_qs, closest_less_qs):
try:
try:
closest_greater = closest_greater_qs[0]
except IndexError:
closest = closest_less_qs[0]
try:
closest_less = closest_less_qs[0]
except IndexError:
closest = closest_greater_qs[0]
except IndexError:
raise self.model.DoesNotExist("There is no closest object"
" because there are no objects.")
if closest_greater.dtime - now > now - closest_less.dtime:
closest = closest_less
else:
closest = closest_greater
return closest.ra, closest.dec
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):
name = make_source_name('SRG A',0.87,45.0)
print(name)
return
now = timezone.localtime(timezone.now())
print(now)
ra='n/a'
dec='n/a'
request_path='load'
try:
surveys = Survey.objects.filter(Q(start__lte=now) & Q(stop__gte=now))
# take first element only:
for survey in surveys:
print(survey.ra_p)
target = survey.target
obsid = survey.experiment
url = survey.get_absolute_url()
ra="%.4f" % survey.ra_p
dec="%.4f" % survey.dec_p
mode='Survey'
if request_path == "load":
path=list(survey.surveypath_set.all().values('ra', 'dec'))[::500]
closest_greater_qs = survey.surveypath_set.filter(dtime__gt=now).order_by('dtime')
closest_less_qs = survey.surveypath_set.filter(dtime__lt=now).order_by('-dtime')
closest_ra, closest_dec = find_closest(now, closest_greater_qs, closest_less_qs)
ra="%.4f" % closest_ra
dec="%.4f" % closest_dec
print("*** closest found ***")
break
except NameError as error:
print('pass',error)
pass
print(ra, dec)

View File

@@ -0,0 +1,34 @@
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 django.contrib.auth.models import User
from monthplan.models import Head, Observation, Seance, Correction, Scan, Survey, FlightPlan
from astropy.io import fits
import datetime
from django.utils import timezone
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):
user = User.objects.get(id=2)
user_email = user.email
print(user_email)
emails = []
users = User.objects.all()
for user in users:
emails.append(user.email)
print(emails)