srg/heasarc/views.py
2024-04-25 17:50:51 +03:00

441 lines
18 KiB
Python

from django.shortcuts import render
from django.db.models import F
from django.db.models import Q
from django.db.models import DecimalField, Value
from django.db.models import Max, Subquery, OuterRef, Min, Case, When, Min, Func
from django.db.models.functions.math import Sqrt, Cos, Power, Abs
from django.shortcuts import get_object_or_404
from django.http import HttpResponse, HttpResponseRedirect, HttpResponseForbidden
from astropy import units as u
from astropy.coordinates import SkyCoord
from astropy.coordinates import ICRS, Galactic, FK5
from astropy.coordinates import BarycentricTrueEcliptic
from astropy.coordinates import HeliocentricTrueEcliptic
from astropy.coordinates import GeocentricTrueEcliptic
from astropy_healpix import HEALPix
from heasarc.utils import healpix_usercat
from heasarc.utils import match_usercat_all
from heasarc.models import HeasarcTable
from heasarc.models import TableColumn, HeasarcObjectClass, HeasarcBase
from heasarc.models import HeasarcXrayMaster, HeasarcXMMSSC
from heasarc.models import HeasarcUserCat, HeasarcUserCatForm
from heasarc.models import HeasarcALLWISEAGN, HeasarcCHANMASTER
from heasarc.models import HeasarcCSC, HeasarcRASS2RXS, Heasarc2SXPS
from heasarc.models import Heasarc4XMMDR9
from heasarc.models import Heasarc4XMMDR12
from heasarc.models import HeasarcXMMSL2
from heasarc.models import Heasarc3MAXI
from heasarc.models import HeasarcMAXIGSCHGL
from srgcat.models import ArtCat
from srglib.utils import make_source_name
from astrobasis.models import GAIADR3
from astrobasis.models import VLASS
from astrobasis.models import GLIMPSE
from astrobasis.models import AllWise
from astrobasis.models import TwoMASS
from artsurvey.models import ArtSurveySource
# Create your views here.
def index(request):
tables = HeasarcTable.objects.all()
xmmssc = HeasarcBase.objects.instance_of(HeasarcXMMSSC)
xray = HeasarcBase.objects.instance_of(HeasarcXrayMaster)
chanmaster = HeasarcBase.objects.instance_of(HeasarcCHANMASTER)
csc = HeasarcBase.objects.instance_of(HeasarcCSC)
rass2rxs = HeasarcBase.objects.instance_of(HeasarcRASS2RXS)
twosxps = HeasarcBase.objects.instance_of(Heasarc2SXPS)
allwiseagn = HeasarcBase.objects.instance_of(HeasarcALLWISEAGN)
xmmdr9 = HeasarcBase.objects.instance_of(Heasarc4XMMDR9)
xmmssc_count = xmmssc.count()
xmmdr9_count = xmmdr9.count()
chanmaster_count = chanmaster.count()
csc_count = csc.count()
rass2rxs_count = rass2rxs.count()
xray_count = xray.count()
twosxps_count = twosxps.count()
allwiseagn_count = allwiseagn.count()
return render(request,'heasarc/index.html', {'tables': tables,
'xmmdr9_count':xmmdr9_count,
'xmmssc_count':xmmssc_count,
'chanmaster_count':chanmaster_count,
'csc_count':csc_count,'twosxps_count':twosxps_count,
'allwiseagn_count':allwiseagn_count,
'rass2rxs_count':rass2rxs_count,'xray_count':xray_count,})
def show_object_classes(request):
classes = HeasarcObjectClass.objects.all().order_by('class_id') #.exclude(class_name='UNCLASSIFIED').distinct('class_name')
return render(request,'heasarc/show_object_classes.html', {'classes': classes,})
def show_table(request, table_id):
try:
table=HeasarcTable.objects.get(pk=table_id)
except:
return HttpResponse("This table was not found")
columns = table.tablecolumn_set.all()
tables = HeasarcTable.objects.all()
return render(request,'heasarc/index.html', {'tables': tables,'table':table,'columns':columns})
def show_heasarc_xray(request, pk_id):
try:
heasarc=HeasarcXrayMaster.objects.get(pk=pk_id)
except:
return HttpResponse("This HeasarcXrayMaster was not found")
erotrans_set = heasarc.erotranssource_set.all()
erosurvey_set = heasarc.erosurveysource_set.all()
artcat_set = heasarc.artsource_set.all()
return render(request,'heasarc/show_heasarc_xray.html',
{'heasarc':heasarc,
'artcat_set':artcat_set,
'erosurvey_set':erosurvey_set,
'erotrans_set':erotrans_set,})
def show_heasarc_xmmssc(request, pk_id):
try:
heasarc=HeasarcXMMSSC.objects.get(pk=pk_id)
except:
return HttpResponse("This HeasarcXMMSSC was not found")
erotrans_set = heasarc.erotranssource_set.all()
erosurvey_set = heasarc.erosurveysource_set.all()
artcat_set = heasarc.artsource_set.all()
return render(request,'heasarc/show_heasarc_xmmssc.html',
{'heasarc':heasarc,
'artcat_set':artcat_set,
'erosurvey_set':erosurvey_set,
'erotrans_set':erotrans_set,})
def show_heasarc_4xmmdr12(request, pk_id):
try:
heasarc=Heasarc4XMMDR12.objects.get(pk=pk_id)
except:
return HttpResponse("Object was not found")
return render(request,'heasarc/show_heasarc_4xmmdr12.html', {'heasarc':heasarc,})
def show_heasarc_3maxi(request, pk_id):
try:
heasarc=Heasarc3MAXI.objects.get(pk=pk_id)
except:
return HttpResponse("This Heasarc3MAXI was not found")
erotrans_set = heasarc.erotranssource_set.all()
erosurvey_set = heasarc.erosurveysource_set.all()
artcat_set = heasarc.artsource_set.all()
return render(request,'heasarc/show_heasarc_3maxi.html',
{'heasarc':heasarc,
'artcat_set':artcat_set,
'erosurvey_set':erosurvey_set,
'erotrans_set':erotrans_set,})
def show_heasarc_xmmsl2(request, pk_id):
try:
src=HeasarcXMMSL2.objects.get(pk=pk_id)
except:
return HttpResponse("This HeasarcXMMSL2 was not found")
crd = SkyCoord(src.ra, src.dec, frame="fk5", unit="deg")
gaia = src.gaia3.all()
gaia_ex = gaia.exclude(Q(pmra__abs__gt=F("pmra_error")*Value(4.)) | Q(pmdec__abs__gt=F("pmdec_error")*Value(4.)) | Q(parallax__abs__gt=F("parallax_error")*Value(4.)))
gaia_ex = gaia_ex.annotate(separation=Value(0.0, output_field=DecimalField()))
for gaiasrc in gaia_ex:
gaia_crd=SkyCoord(gaiasrc.ra, gaiasrc.dec, frame="fk5", unit="deg")
gaiasrc.separation=crd.separation(SkyCoord(gaiasrc.ra, gaiasrc.dec, frame="fk5", unit="deg")).arcsecond
gaia_pm = gaia.filter(Q(pmra__abs__gt=F("pmra_error")*Value(4.)) | Q(pmdec__abs__gt=F("pmdec_error")*Value(4.)))
gaia_pm = gaia_pm.annotate(separation=Value(0.0, output_field=DecimalField()))
for gaiasrc in gaia_pm:
gaia_crd=SkyCoord(gaiasrc.ra, gaiasrc.dec, frame="fk5", unit="deg")
gaiasrc.separation=crd.separation(gaia_crd).arcsecond
gaia_plx = gaia.filter(Q(parallax__abs__gt=F("parallax_error")*Value(4.)))
gaia_plx = gaia_plx.annotate(separation=Value(0.0, output_field=DecimalField()))
for gaiasrc in gaia_plx:
gaia_crd=SkyCoord(gaiasrc.ra, gaiasrc.dec, frame="fk5", unit="deg")
gaiasrc.separation=crd.separation(SkyCoord(gaiasrc.ra, gaiasrc.dec, frame="fk5", unit="deg")).arcsecond
return render(request,'heasarc/show_heasarc_xmmsl2.html',
{'src':src,'gaia_plx':gaia_plx,'gaia_pm':gaia_pm,'gaia_ex':gaia_ex})
def annotate_separation(srcs, source_crd):
srcs = srcs.annotate(separation=Value(0.0, output_field=DecimalField()))
for src in srcs:
crd = SkyCoord(src.ra, src.dec, frame="fk5", unit="deg")
src.separation=source_crd.separation(crd).arcsecond
return srcs
def show_heasarc_base(request, source_id):
src = get_object_or_404(HeasarcBase, pk=source_id)
crd = SkyCoord(src.ra, src.dec, frame="fk5", unit="deg")
artsurveysources_listed = src.artsurveysource_set.all()
artsurveysources_linked = src.artsurveysource_linked.all()
gaia = src.gaia3.all()
usercat = annotate_separation(src.usercat.all(), crd)
vlass = annotate_separation(src.vlass.all(), crd)
glimpse = annotate_separation(src.glimpse.all(), crd)
twomass = annotate_separation(src.twomass.all(), crd)
allwise = annotate_separation(src.allwise.all(), crd)
gaia_ex = gaia.exclude(Q(pmra__abs__gt=F("pmra_error")*Value(4.)) | Q(pmdec__abs__gt=F("pmdec_error")*Value(4.)) | Q(parallax__abs__gt=F("parallax_error")*Value(4.)))
gaia_ex = gaia_ex.annotate(separation=Value(0.0, output_field=DecimalField()))
for gaiasrc in gaia_ex:
gaia_crd=SkyCoord(gaiasrc.ra, gaiasrc.dec, frame="fk5", unit="deg")
gaiasrc.separation=crd.separation(SkyCoord(gaiasrc.ra, gaiasrc.dec, frame="fk5", unit="deg")).arcsecond
gaia_pm = gaia.filter(Q(pmra__abs__gt=F("pmra_error")*Value(4.)) | Q(pmdec__abs__gt=F("pmdec_error")*Value(4.)))
gaia_pm = gaia_pm.annotate(separation=Value(0.0, output_field=DecimalField()))
for gaiasrc in gaia_pm:
gaia_crd=SkyCoord(gaiasrc.ra, gaiasrc.dec, frame="fk5", unit="deg")
gaiasrc.separation=crd.separation(gaia_crd).arcsecond
gaia_plx = gaia.filter(Q(parallax__abs__gt=F("parallax_error")*Value(4.)))
gaia_plx = gaia_plx.annotate(separation=Value(0.0, output_field=DecimalField()))
for gaiasrc in gaia_plx:
gaia_crd=SkyCoord(gaiasrc.ra, gaiasrc.dec, frame="fk5", unit="deg")
gaiasrc.separation=crd.separation(SkyCoord(gaiasrc.ra, gaiasrc.dec, frame="fk5", unit="deg")).arcsecond
return render(request,'heasarc/show_heasarc_base.html',
{'src':src,'usercat':usercat,
'vlass':vlass,
'glimpse':glimpse,
'twomass':twomass,
'allwise':allwise,
'artsurveysources_listed':artsurveysources_listed,
'artsurveysources_linked':artsurveysources_linked,
'gaia_plx':gaia_plx,'gaia_pm':gaia_pm,'gaia_ex':gaia_ex})
def show_heasarc_4xmm(request, pk_id):
try:
heasarc=Heasarc4XMMDR9.objects.get(pk=pk_id)
except:
return HttpResponse("This Heasarc4XMMDR9 was not found")
erotrans_set = heasarc.erotranssource_set.all()
erosurvey_set = heasarc.erosurveysource_set.all()
artcat_set = heasarc.artsource_set.all()
return render(request,'heasarc/show_heasarc_4xmm.html',
{'src':heasarc,
'artcat_set':artcat_set,
'erosurvey_set':erosurvey_set,
'erotrans_set':erotrans_set,})
def show_heasarc_chanmaster(request, pk_id):
try:
heasarc=HeasarcCHANMASTER.objects.get(pk=pk_id)
except:
return HttpResponse("This HeasarcCHANMASTER was not found")
erotrans_set = heasarc.erotranssource_set.all()
erosurvey_set = heasarc.erosurveysource_set.all()
artcat_set = heasarc.artsource_set.all()
return render(request,'heasarc/show_heasarc_chanmaster.html',
{'heasarc':heasarc,
'artcat_set':artcat_set,
'erosurvey_set':erosurvey_set,
'erotrans_set':erotrans_set,})
def show_heasarc_csc(request, pk_id):
try:
heasarc=HeasarcCSC.objects.get(pk=pk_id)
except:
return HttpResponse("This HeasarcCSC was not found")
erotrans_set = heasarc.erotranssource_set.all()
erosurvey_set = heasarc.erosurveysource_set.all()
artcat_set = heasarc.artsource_set.all()
gaia = heasarc.gaia3.all()
gaia_plx = gaia.filter(Q(parallax__abs__gt=F("parallax_error")*Value(4.)))
gaia_plx = gaia_plx.annotate(separation=Value(0.0, output_field=DecimalField()))
gaia_plx = gaia_plx.annotate(erosita_separation=Value(0.0, output_field=DecimalField()))
for gaiasrc in gaia_plx:
gaia_crd=SkyCoord(gaiasrc.ra, gaiasrc.dec, frame="fk5", unit="deg")
gaiasrc.separation=c.separation(SkyCoord(gaiasrc.ra, gaiasrc.dec, frame="fk5", unit="deg")).arcsecond
if not erosita is None:
gaiasrc.erosita_separation=erosita_crd.separation(gaia_crd).arcsecond
return render(request,'heasarc/show_heasarc_csc.html',
{'heasarc':heasarc,
'gaia_plx':gaia_plx,
'artcat_set':artcat_set,
'erosurvey_set':erosurvey_set,
'erotrans_set':erotrans_set,})
def show_heasarc_rass2rxs(request, pk_id):
try:
heasarc=HeasarcRASS2RXS.objects.get(pk=pk_id)
except:
return HttpResponse("This HeasarcRASS2RXS was not found")
erotrans_set = heasarc.erotranssource_set.all()
erosurvey_set = heasarc.erosurveysource_set.all()
artcat_set = heasarc.artsource_set.all()
return render(request,'heasarc/show_heasarc_rass2rxs.html',
{'heasarc':heasarc,
'artcat_set':artcat_set,
'erosurvey_set':erosurvey_set,
'erotrans_set':erotrans_set,})
def show_heasarc_maxi_gsc(request, pk_id):
try:
heasarc=HeasarcMAXIGSCHGL.objects.get(pk=pk_id)
except:
return HttpResponse("This HeasarcRASS2RXS was not found")
erotrans_set = heasarc.erotranssource_set.all()
erosurvey_set = heasarc.erosurveysource_set.all()
artcat_set = heasarc.artsource_set.all()
return render(request,'heasarc/show_heasarc_maxi_gsc.html',
{'heasarc':heasarc,
'artcat_set':artcat_set,
'erosurvey_set':erosurvey_set,
'erotrans_set':erotrans_set,})
def show_heasarc_allwiseagn(request, pk_id):
try:
heasarc=HeasarcALLWISEAGN.objects.get(pk=pk_id)
except:
return HttpResponse("This HeasarcALLWISEAGN was not found")
erotrans_set = heasarc.erotranssource_set.all()
erosurvey_set = heasarc.erosurveysource_set.all()
artcat_set = heasarc.artsource_set.all()
return render(request,'heasarc/show_heasarc_allwiseagn.html',
{'heasarc':heasarc,
'artcat_set':artcat_set,
'erosurvey_set':erosurvey_set,
'erotrans_set':erotrans_set,})
def show_heasarc_2sxps(request, pk_id):
try:
heasarc=Heasarc2SXPS.objects.get(pk=pk_id)
except:
return HttpResponse("This Heasarc2SXPS was not found")
erotrans_set = heasarc.erotranssource_set.all()
erosurvey_set = heasarc.erosurveysource_set.all()
artcat_set = heasarc.artsource_set.all()
return render(request,'heasarc/show_heasarc_2sxps.html',
{'heasarc':heasarc,
'artcat_set':artcat_set,
'erosurvey_set':erosurvey_set,
'erotrans_set':erotrans_set,})
def set_gaia(request,source_id,gaia_id):
src = get_object_or_404(HeasarcBase, pk=source_id)
src.gaia3_primary = get_object_or_404(GAIADR3, pk=gaia_id)
src.save()
return HttpResponseRedirect(src.get_base_url())
def clean_gaia(request,source_id):
src = get_object_or_404(HeasarcBase, pk=source_id)
src.gaia3_primary=None
src.save()
return HttpResponseRedirect(src.get_base_url())
def set_vlass(request,source_id,vlass_id):
src = get_object_or_404(HeasarcBase, pk=source_id)
src.vlass_primary = get_object_or_404(VLASS, pk=vlass_id)
src.save()
return HttpResponseRedirect(src.get_base_url())
def clean_vlass(request,source_id):
src = get_object_or_404(HeasarcBase, pk=source_id)
src.vlass_primary=None
src.save()
return HttpResponseRedirect(src.get_base_url())
def set_glimpse(request,source_id,glimpse_id):
src = get_object_or_404(HeasarcBase, pk=source_id)
src.glimpse_primary = get_object_or_404(GLIMPSE, pk=glimpse_id)
src.save()
return HttpResponseRedirect(src.get_base_url())
def clean_glimpse(request,source_id):
src = get_object_or_404(HeasarcBase, pk=source_id)
src.glimpse_primary=None
src.save()
return HttpResponseRedirect(src.get_base_url())
def set_twomass(request,source_id,twomass_id):
src = get_object_or_404(HeasarcBase, pk=source_id)
src.twomass_primary = get_object_or_404(TwoMASS, pk=twomass_id)
src.save()
return HttpResponseRedirect(src.get_base_url())
def clean_twomass(request,source_id):
src = get_object_or_404(HeasarcBase, pk=source_id)
src.twomass_primary=None
src.save()
return HttpResponseRedirect(src.get_base_url())
def set_allwise(request,source_id,allwise_id):
src = get_object_or_404(HeasarcBase, pk=source_id)
src.allwise_primary = get_object_or_404(AllWise, pk=allwise_id)
src.save()
return HttpResponseRedirect(src.get_base_url())
def clean_allwise(request,source_id):
src = get_object_or_404(HeasarcBase, pk=source_id)
src.allwise_primary=None
src.save()
return HttpResponseRedirect(src.get_base_url())
def update_heasarc_usercat(request,pk_id,source_id):
src = get_object_or_404(ArtSurveySource, pk=source_id)
obj = get_object_or_404(HeasarcUserCat, pk=pk_id)
srcs = obj.artsurveysource_set.all()
srcs_linked = obj.artsurveysource_linked.all()
if request.method == 'POST': # If the form has been submitted...
form = HeasarcUserCatForm(request.POST,instance=obj) # A form bound to the POST data
if form.is_valid(): # All validation rules pass
new_form=form.save(commit=False)
ra=float(form.cleaned_data['ra'])
dec=float(form.cleaned_data['dec'])
name = form.cleaned_data['name'] if (form.cleaned_data['name']) else 'NONAME'
autoname=form.cleaned_data['autoname']
if(autoname):
new_form.name=make_source_name(name,ra,dec)
new_form.save()
healpix_usercat(new_form)
match_usercat_all(new_form)
#category = form.cleaned_data['category']
#new_form.category=category
#new_form.save()
return HttpResponseRedirect(src.get_absolute_url())
else:
return render(request,'artsurvey/usercat.html', {'form':form,'src':src,'srcs':srcs,'srcs_linked':srcs_linked,})
else:
form = HeasarcUserCatForm(instance=obj)
return render(request,'artsurvey/usercat.html', {'form':form,'obj':obj,'src':src,'srcs':srcs,'srcs_linked':srcs_linked,})
def delete_heasarc_usercat(request,pk_id,source_id):
src = get_object_or_404(ArtSurveySource, pk=source_id)
obj = get_object_or_404(HeasarcUserCat, pk=pk_id)
obj.delete()
return HttpResponseRedirect(src.get_absolute_url())