srg/astrobasis/views.py
2024-04-26 12:43:00 +03:00

268 lines
12 KiB
Python

from django.shortcuts import render
from astrobasis.models import ZTFAlert, ALeRCE
from django.db.models import Q
from srglib.utils import make_source_name
from srglib.utils import srg_auth, srg_group_auth, srg_group_auth_stats, status_code
from django.shortcuts import get_object_or_404
from heasarc.models import HeasarcBase
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 astropy.coordinates.name_resolve import get_icrs_coordinates
from django.http import HttpResponse, HttpResponseRedirect, HttpResponseForbidden
from astrobasis.models import Magnitude, MagnitudeForm
from astrobasis.models import AstroBasisUserCat
from astrobasis.models import AstroBasisUserCatForm
# Create your views here.
def index(request):
"""
status=srg_group_auth(request.user, "srg-erosita-transients")
if status != 0:
return HttpResponse(status_code[status])
"""
#ztf_alerts = ZTFAlert.objects.all().order_by('-created')
ztf_alerts = ALeRCE.objects.all() #.order_by('-created')
ztf_ntotal=ztf_alerts.count()
agn_count = ALeRCE.objects.filter(classearly=18).count()
sn_count = ALeRCE.objects.filter(classearly=19).count()
vs_count = ALeRCE.objects.filter(classearly=20).count()
asteroid_count = ALeRCE.objects.filter(classearly=21).count()
bogus_count = ALeRCE.objects.filter(classearly=22).count()
return render(request,'astrobasis/index.html', {#'ztf_alerts':ztf_alerts,
'ztf_ntotal':ztf_ntotal,
'agn_count':agn_count,
'sn_count':sn_count,
'vs_count':vs_count,
'asteroid_count':asteroid_count,
'bogus_count':bogus_count,})
def ztf_alerce_agn(request):
ztf_alerts = ALeRCE.objects.filter(classearly=18).order_by('-created')
ztf_ntotal=ztf_alerts.count()
agn_count = ALeRCE.objects.filter(classearly=18).count()
sn_count = ALeRCE.objects.filter(classearly=19).count()
vs_count = ALeRCE.objects.filter(classearly=20).count()
asteroid_count = ALeRCE.objects.filter(classearly=21).count()
bogus_count = ALeRCE.objects.filter(classearly=22).count()
return render(request,'astrobasis/index.html', {'ztf_alerts':ztf_alerts,
'ztf_ntotal':ztf_ntotal,
'agn_count':agn_count,
'sn_count':sn_count,
'vs_count':vs_count,
'asteroid_count':asteroid_count,
'bogus_count':bogus_count,})
def ztf_alerce_sn(request):
ztf_alerts = ALeRCE.objects.filter(classearly=19).order_by('-created')
ztf_ntotal=ztf_alerts.count()
agn_count = ALeRCE.objects.filter(classearly=18).count()
sn_count = ALeRCE.objects.filter(classearly=19).count()
vs_count = ALeRCE.objects.filter(classearly=20).count()
asteroid_count = ALeRCE.objects.filter(classearly=21).count()
bogus_count = ALeRCE.objects.filter(classearly=22).count()
return render(request,'astrobasis/index.html', {'ztf_alerts':ztf_alerts,
'ztf_ntotal':ztf_ntotal,
'agn_count':agn_count,
'sn_count':sn_count,
'vs_count':vs_count,
'asteroid_count':asteroid_count,
'bogus_count':bogus_count,})
def ztf_alerce_vs(request):
ztf_alerts = ALeRCE.objects.filter(classearly=20).order_by('-created')
ztf_ntotal=ztf_alerts.count()
agn_count = ALeRCE.objects.filter(classearly=18).count()
sn_count = ALeRCE.objects.filter(classearly=19).count()
vs_count = ALeRCE.objects.filter(classearly=20).count()
asteroid_count = ALeRCE.objects.filter(classearly=21).count()
bogus_count = ALeRCE.objects.filter(classearly=22).count()
return render(request,'astrobasis/index.html', {'ztf_alerts':ztf_alerts,
'ztf_ntotal':ztf_ntotal,
'agn_count':agn_count,
'sn_count':sn_count,
'vs_count':vs_count,
'asteroid_count':asteroid_count,
'bogus_count':bogus_count,})
def ztf_alerce_asteroid(request):
ztf_alerts = ALeRCE.objects.filter(classearly=21).order_by('-created')
ztf_ntotal=ztf_alerts.count()
agn_count = ALeRCE.objects.filter(classearly=18).count()
sn_count = ALeRCE.objects.filter(classearly=19).count()
vs_count = ALeRCE.objects.filter(classearly=20).count()
asteroid_count = ALeRCE.objects.filter(classearly=21).count()
bogus_count = ALeRCE.objects.filter(classearly=22).count()
return render(request,'astrobasis/index.html', {'ztf_alerts':ztf_alerts,
'ztf_ntotal':ztf_ntotal,
'agn_count':agn_count,
'sn_count':sn_count,
'vs_count':vs_count,
'asteroid_count':asteroid_count,
'bogus_count':bogus_count,})
def ztf_alerce_bogus(request):
ztf_alerts = ALeRCE.objects.filter(classearly=22).order_by('-created')
ztf_ntotal=ztf_alerts.count()
agn_count = ALeRCE.objects.filter(classearly=18).count()
sn_count = ALeRCE.objects.filter(classearly=19).count()
vs_count = ALeRCE.objects.filter(classearly=20).count()
asteroid_count = ALeRCE.objects.filter(classearly=21).count()
bogus_count = ALeRCE.objects.filter(classearly=22).count()
return render(request,'astrobasis/index.html', {'ztf_alerts':ztf_alerts,'ztf_ntotal':ztf_ntotal,'agn_count':agn_count,
'sn_count':sn_count,
'vs_count':vs_count,
'asteroid_count':asteroid_count,
'bogus_count':bogus_count,})
def show_ztf_alerce(request, alerce_pk):
try:
alerce=ALeRCE.objects.get(pk=alerce_pk)
except:
return HttpResponse("This ALeRCE ID was not found")
erotrans_set = alerce.erotranssource_set.all()
#erosurvey_set = alerce.erosurveysource_set.all()
#artcat_set = alerce.artsource_set.all()
return render(request,'astrobasis/show_ztf_alerce.html',
{'alerce':alerce,
#'artcat_set':artcat_set,
#'erosurvey_set':erosurvey_set,
'erotrans_set':erotrans_set,})
def ztf_filter(request):
"""
status=srg_group_auth(request.user, "srg-erosita-transients")
if status != 0:
return HttpResponse(status_code[status])
"""
ztf_alerts = ZTFAlert.objects.filter(Q(rb__gt=0.65) & Q(nbad=0) & Q(fwhm__lt=5) & Q(elong__lt=1.2) & Q(magdiff__gt=-0.1) & Q(magdiff__lt=0.1)).order_by('-created')
ntotal=ztf_alerts.count()
return render(request,'astrobasis/index.html', {'ztf_alerts':ztf_alerts,'ntotal':ntotal,})
def delete_astrobasis_source(request, source_id, heasarcbase_id):
status=srg_group_auth_stats(request, "srg-artxc-catalog")
if status != 0:
return HttpResponse(status_code[status])
src = get_object_or_404(AstroBasisUserCat, pk=source_id)
base = get_object_or_404(HeasarcBase, pk=heasarcbase_id)
magns = src.magnitudes.all()
magns.delete()
src.delete()
return HttpResponseRedirect(base.get_base_url())
def new_astrobasis_source(request, source_id):
status=srg_group_auth_stats(request, "srg-artxc-catalog")
if status != 0:
return HttpResponse(status_code[status])
src = get_object_or_404(HeasarcBase, pk=source_id)
c = SkyCoord(src.ra, src.dec, frame="fk5", unit="deg")
if request.method == 'POST':
form = AstroBasisUserCatForm(request.POST)
if form.is_valid():
new_form=form.save(commit=False)
#bibcode=form.cleaned_data['bibcode']
#notes=form.cleaned_data['notes']
ra=float(form.cleaned_data['ra'])
dec=float(form.cleaned_data['dec'])
name=form.cleaned_data['name']
autoname=form.cleaned_data['autoname']
if(autoname):
new_form.name=make_source_name(name,ra,dec)
new_form.autoname=False
new_form.save()
#healpix_usercat(new_form)
#match_usercat_all(new_form)
src.usercat.add(new_form)
return HttpResponseRedirect(src.get_base_url())
else:
pass
form = AstroBasisUserCatForm()
return render(request, 'astrobasis/usercat.html', {'form': form,'src':src,})
def delmagn(request, magnitude_id,heasarcbase_id):
status=srg_group_auth_stats(request, "srg-artxc-catalog")
if status != 0:
return HttpResponse(status_code[status])
magn = get_object_or_404(Magnitude, pk=magnitude_id)
base = get_object_or_404(HeasarcBase, pk=heasarcbase_id)
magn.delete()
return HttpResponseRedirect(base.get_base_url())
def addmagn_astrobasis_source(request, source_id,heasarcbase_id):
status=srg_group_auth_stats(request, "srg-artxc-catalog")
if status != 0:
return HttpResponse(status_code[status])
src = get_object_or_404(AstroBasisUserCat, pk=source_id)
base = get_object_or_404(HeasarcBase, pk=heasarcbase_id)
if request.method == 'POST':
form = MagnitudeForm(request.POST)
if form.is_valid():
new_form=form.save(commit=False)
magn=form.cleaned_data['magn']
band=form.cleaned_data['band']
new_form.save()
src.magnitudes.add(new_form)
return HttpResponseRedirect(base.get_base_url())
else:
pass
form = MagnitudeForm()
return render(request, 'astrobasis/magnitude.html', {'form': form,'src':src,'base':base,})
def update_astrobasis_source(request, source_id, heasarcbase_id):
status=srg_group_auth_stats(request, "srg-artxc-catalog")
if status != 0:
return HttpResponse(status_code[status])
src = get_object_or_404(AstroBasisUserCat, pk=source_id)
base = get_object_or_404(HeasarcBase, pk=heasarcbase_id)
if request.method == 'POST':
form = AstroBasisUserCatForm(request.POST, instance=src)
if form.is_valid():
new_form=form.save(commit=False)
#bibcode=form.cleaned_data['bibcode']
#notes=form.cleaned_data['notes']
ra = float(form.cleaned_data['ra'])
dec = float(form.cleaned_data['dec'])
name = form.cleaned_data['name']
autoname = form.cleaned_data['autoname']
if(autoname):
new_form.name=make_source_name(name,ra,dec)
new_form.autoname=False
new_form.save()
#healpix_usercat(new_form)
#match_usercat_all(new_form)
#src.ra=ra
#src.dec=dec
#src.name=name
#src.save()
return HttpResponseRedirect(base.get_base_url())
else:
pass
form = AstroBasisUserCatForm(instance=src)
return render(request, 'astrobasis/update_usercat.html', {'form': form,'src':src,'base':base,})