from django.shortcuts import render from django.http import HttpResponse, HttpResponseRedirect, HttpResponseForbidden from django.db.models import DecimalField, Value from django.db.models import F from django.db.models import Q from django.utils.encoding import smart_str from django.urls import reverse from django.urls import resolve from django.contrib.auth.models import Group from django.shortcuts import get_object_or_404 from heasarc.models import HeasarcXrayMaster from heasarc.models import HeasarcXMMSSC from heasarc.models import HeasarcBase from heasarc.models import HeasarcSwiftBAT105m from heasarc.models import HeasarcIntegral9 from heasarc.models import HeasarcIntRefCat from heasarc.models import HeasarcRASS2RXS from heasarc.models import HeasarcMAXIGSCHGL from heasarc.models import HeasarcXTEASSCAT from heasarc.models import Heasarc4XMMDR9 from heasarc.models import HeasarcXMMSL2 from heasarc.models import Heasarc3MAXI from srgcat.models import ArtCat, ArtSource from srglib.utils import srg_auth, srg_group_auth, srg_group_auth_stats, status_code from srgcat.models import SkyMaps, SrgDataDump, SkyMapSource, SelectAllskyMissed from srgcat.models import Selection, UserSessionParameters from srgcat.models import TrackStats from monthplan.models import Survey from monthplan.models import SurveyHealpixPlate, NSIDE_PLATES, ORDER, MAPS_DIR, Survey, SurveyPath from astropy import units as u from astropy.coordinates import SkyCoord from astropy.coordinates import ICRS, Galactic, FK5 from astropy_healpix import HEALPix from .utils import make_source_name from .forms import SourceNameForm, LookupTargetForm, SkyMapForm from .forms import SelectionForm, UserSessionParametersForm import csv from math import isfinite # Create your views here. def HttpResponseCSV(srcs, dump=None, key='', subclass=None): response = HttpResponse(content_type='text/csv') response['Content-Disposition'] = 'attachment; filename='+"{}_{}.csv".format(key,dump) writer = csv.writer(response, csv.excel) #response.write(u'\ufeff'.encode('utf8')) response.write(u'# '.encode('utf8')) """ CNTS,CNTS_ERR,CNTS_BG,EXPTIME,FLUX,FLUX_ERR,SIG,NFALSE """ writer.writerow([ smart_str(u"NAME"), smart_str(u"FIELD"), smart_str(u"RA"), smart_str(u"Dec"), smart_str(u"CNTS"), smart_str(u"CNTS_ERR"), smart_str(u"CNTS_BG"), smart_str(u"EXPTIME"), smart_str(u"FLUX"), smart_str(u"FLUX_ERR"), smart_str(u"SIG"), smart_str(u"Simbad(offset, type, redshift, name, ra, dec)"), smart_str(u"4XMM(offset, name, ra, dec, ep_5_flux)"), smart_str(subclass.__name__) if subclass else None, ]) for src in srcs: if(subclass): subcatalog = src.heasarc.instance_of(subclass).first() crd = SkyCoord(src.ra, src.dec, frame="fk5", unit="deg") xmm = src.heasarc.instance_of(Heasarc4XMMDR9) xmm_name=[] xmm_separation=[] xmm_ra=[] xmm_dec=[] xmm_ep_5_flux=[] xmm_ep_5_flux_err=[] for xmmsrc in xmm: xmm_name.append(xmmsrc.name) xmm_ra.append(xmmsrc.ra) xmm_dec.append(xmmsrc.dec) xmm_ep_5_flux.append(xmmsrc.EP_5_FLUX) xmm_ep_5_flux_err.append(xmmsrc.EP_5_FLUX_ERR) xmm_separation.append(crd.separation(SkyCoord(xmmsrc.ra, xmmsrc.dec, frame="fk5", unit="deg")).arcsecond) xmm_szip = sorted(zip(xmm_separation, xmm_name, xmm_ra, xmm_dec, xmm_ep_5_flux, xmm_ep_5_flux_err)) simbad = src.simbad.all() simbad_name=[] simbad_type=[] simbad_redshift=[] simbad_separation=[] simbad_ra=[] simbad_dec=[] for simsrc in simbad: simbad_ra.append(simsrc.ra) simbad_dec.append(simsrc.dec) simbad_name.append(simsrc.main_id) simbad_type.append(simsrc.obj_class) if isfinite(simsrc.z): simbad_redshift.append(simsrc.z) else: simbad_redshift.append(0.0) simbad_separation.append(crd.separation(SkyCoord(simsrc.ra, simsrc.dec, frame="fk5", unit="deg")).arcsecond) simbad_szip = sorted(zip(simbad_separation, simbad_type, simbad_redshift, simbad_name, simbad_ra, simbad_dec)) writer.writerow([ smart_str(src.name_orig), smart_str(src.skymap), smart_str(src.ra), smart_str(src.dec), smart_str(src.cnts), smart_str(src.cnts_err), smart_str(src.cnts_bg), smart_str(src.exptime), smart_str(src.flux), smart_str(src.flux_err), smart_str(src.sig), smart_str([simbad_name for simbad_name in simbad_szip]), smart_str([xmm_name for xmm_name in xmm_szip]), smart_str(subcatalog.name) if subclass else None, ]) return response def get_skymap_sources(dump, owner): try: session = UserSessionParameters.objects.get(owner=owner) if not session.sign_threshold is None: skymap_sources = dump.skymapsource_set.all().filter(sig__gt=session.sign_threshold).order_by('ra') else: skymap_sources = dump.skymapsource_set.all().order_by('ra') except UserSessionParameters.DoesNotExist: skymap_sources = dump.skymapsource_set.all().order_by('ra') pass return skymap_sources def show_stats(request): status=srg_auth(request.user) if status != 0: return HttpResponse(status_code[status]) groups=Group.objects.all() data = TrackStats.objects.all().order_by('-created')[:100] return render(request,'srgcat/stats.html', {'data': data,'groups':groups,}) def show_stats_by_group(request, group_id): status=srg_auth(request.user) if status != 0: return HttpResponse(status_code[status]) try: group = Group.objects.get(pk=group_id) except: return HttpResponse("This group was not found") groups=Group.objects.all() data = TrackStats.objects.all().filter(group=group).order_by('-created') return render(request,'srgcat/stats.html', {'data': data,'groups':groups,}) def show_aladin_healpix(request): status=srg_group_auth_stats(request, "srg-artxc-survey") if status != 0: return HttpResponse(status_code[status]) selections = Selection.objects.filter(owner=request.user) artcats = ArtCat.objects.all() dump = SrgDataDump.objects.filter(catalog_loaded=True).latest('date') #dump = SrgDataDump.objects.latest('date') skymap_sources = get_skymap_sources(dump, request.user) ntotal=skymap_sources.count() #skymap_sources = SkyMapSource.objects.all().order_by('created') try: survey = Survey.objects.get(Q(start__lt=dump.date) & Q(stop__gt=dump.date)) surveypaths = survey.surveypath_set.all() except: survey=None surveypaths=None pass return render(request,'srgcat/healpix.html', {'artcats': artcats, 'selections':selections, 'skymap_sources':skymap_sources, 'ntotal':ntotal, 'srcs':skymap_sources, 'dump':dump, 'survey':survey, 'surveypaths':surveypaths,}) def index(request): status=srg_group_auth_stats(request, "srg-artxc-survey") if status != 0: return HttpResponse(status_code[status]) print("srgcat index") selections = Selection.objects.filter(owner=request.user) artcats = ArtCat.objects.all() dump = SrgDataDump.objects.filter(catalog_loaded=True).latest('date') #dump = SrgDataDump.objects.latest('date') skymap_sources = get_skymap_sources(dump, request.user) ntotal=skymap_sources.count() #skymap_sources = SkyMapSource.objects.all().order_by('created') try: survey = Survey.objects.get(Q(start__lt=dump.date) & Q(stop__gt=dump.date)) surveypaths = survey.surveypath_set.all() except: survey=None surveypaths=None pass print("srgcat index render") return render(request,'srgcat/index.html', {'artcats': artcats, 'selections':selections, 'skymap_sources':skymap_sources, 'ntotal':ntotal, 'srcs':skymap_sources, 'dump':dump, 'survey':survey, 'surveypaths':surveypaths,}) def show_erosita_matched_catalogs(request): status=srg_group_auth_stats(request, "srg-artxc-survey") if status != 0: return HttpResponse(status_code[status]) selections = Selection.objects.filter(owner=request.user) artcats = ArtCat.objects.all() return render(request,'srgcat/erosita_matched_catalogs.html', {'artcats': artcats,'selections':selections,}) def show_erosita_matched_catalog(request, catalog_id): status=srg_group_auth_stats(request, "srg-artxc-survey") if status != 0: return HttpResponse(status_code[status]) try: catalog=ArtCat.objects.get(pk=catalog_id) except: return HttpResponse("This catalog was not found") artcats = ArtCat.objects.all() skymap_sources=catalog.skymapsource_set.all().order_by("-ra") selections = Selection.objects.filter(owner=request.user) artcats = ArtCat.objects.all() return render(request,'srgcat/erosita_matched_catalogs.html', {'artcats': artcats, 'catalog':catalog, 'selections':selections, 'skymap_sources':skymap_sources,}) def show_erosita_matched(request, catalog_id): status=srg_group_auth_stats(request, "srg-artxc-survey") if status != 0: return HttpResponse(status_code[status]) try: catalog=ArtCat.objects.get(pk=catalog_id) except: return HttpResponse("This catalog was not found") artcats = ArtCat.objects.all() skymap_sources=catalog.skymapsource_set.filter(erositamatch__isnull=False).order_by("-ra") selections = Selection.objects.filter(owner=request.user) artcats = ArtCat.objects.all() return render(request,'srgcat/erosita_matched_catalogs.html', {'artcats': artcats, 'catalog':catalog, 'selections':selections, 'skymap_sources':skymap_sources,}) def show_erosita_nomatch(request, catalog_id): status=srg_group_auth_stats(request, "srg-artxc-survey") if status != 0: return HttpResponse(status_code[status]) try: catalog=ArtCat.objects.get(pk=catalog_id) except: return HttpResponse("This catalog was not found") artcats = ArtCat.objects.all() skymap_sources=catalog.skymapsource_set.filter(erositamatch__isnull=True).order_by("-ra") selections = Selection.objects.filter(owner=request.user) artcats = ArtCat.objects.all() return render(request,'srgcat/erosita_matched_catalogs.html', {'artcats': artcats, 'catalog':catalog, 'selections':selections, 'skymap_sources':skymap_sources,}) def show_selection(request, selection_id): status=srg_group_auth_stats(request, "srg-artxc-survey") if status != 0: return HttpResponse(status_code[status]) selections = Selection.objects.filter(owner=request.user) try: selection = Selection.objects.get(pk=selection_id) except: return HttpResponse("This Selection was not found") skymap_sources = selection.skymap_sources.all() ntotal=skymap_sources.count() return render(request,'srgcat/index.html', {'selection':selection, 'ntotal':ntotal, 'skymap_sources':skymap_sources, 'selections':selections,}) def add_skymapsource_to_selection(request, selection_id, skymapsource_id): status=srg_group_auth_stats(request, "srg-artxc-survey") if status != 0: return HttpResponse(status_code[status]) selections = Selection.objects.filter(owner=request.user) try: selection = Selection.objects.get(pk=selection_id) except: return HttpResponse("This Selection was not found") try: src=SkyMapSource.objects.get(pk=skymapsource_id) except: return HttpResponse("This SkyMapSource was not found") if not selection.skymap_sources.filter(pk=src.pk).exists(): selection.skymap_sources.add(src) selection.save() skymap_sources = selection.skymap_sources.all() ntotal=skymap_sources.count() return render(request,'srgcat/index.html', {'selection':selection, 'ntotal':ntotal, 'skymap_sources':skymap_sources, 'selections':selections,}) def delete_skymapsource_in_selection(request, selection_id, skymapsource_id): status=srg_group_auth_stats(request, "srg-artxc-survey") if status != 0: return HttpResponse(status_code[status]) selections = Selection.objects.filter(owner=request.user) try: selection = Selection.objects.get(pk=selection_id) except: return HttpResponse("This Selection was not found") try: src=SkyMapSource.objects.get(pk=skymapsource_id) except: return HttpResponse("This SkyMapSource was not found") if selection.skymap_sources.filter(pk=src.pk).exists(): selection.skymap_sources.remove(src) selection.save() skymap_sources = selection.skymap_sources.all() ntotal=skymap_sources.count() return render(request,'srgcat/index.html', {'selection':selection, 'ntotal':ntotal, 'skymap_sources':skymap_sources, 'selections':selections,}) def show_gaia(request): status=srg_group_auth_stats(request, "srg-artxc-survey") if status != 0: return HttpResponse(status_code[status]) artcats = ArtCat.objects.all() dump = SrgDataDump.objects.filter(catalog_loaded=True).latest('date') #skymap_sources = dump.skymapsource_set.exclude(gaia=None) skymap_sources = get_skymap_sources(dump, request.user).exclude(gaia=None) ntotal=skymap_sources.count() selections = Selection.objects.filter(owner=request.user) #skymap_sources = SkyMapSource.objects.exclude(gaia=None).order_by('created') return render(request,'srgcat/index.html', {'selections':selections, 'artcats': artcats, 'skymap_sources':skymap_sources, 'ntotal':ntotal, 'srcs':skymap_sources, 'dump':dump,}) def show_heasarc(request): status=srg_group_auth_stats(request, "srg-artxc-survey") if status != 0: return HttpResponse(status_code[status]) dump = SrgDataDump.objects.filter(catalog_loaded=True).latest('date') #skymap_sources = dump.skymapsource_set.exclude(heasarc=None) skymap_sources = get_skymap_sources(dump, request.user).exclude(heasarc=None) ntotal=skymap_sources.count() selections = Selection.objects.filter(owner=request.user) """ skymap_sources = SkyMapSource.objects.exclude(heasarc=None).order_by('created') """ return render(request,'srgcat/index.html', {'selections':selections, 'skymap_sources':skymap_sources, 'ntotal':ntotal,'srcs':skymap_sources,'dump':dump,}) def show_xss(request): status=srg_group_auth_stats(request, "srg-artxc-survey") if status != 0: return HttpResponse(status_code[status]) dump = SrgDataDump.objects.filter(catalog_loaded=True).latest('date') #skymap_sources = dump.skymapsource_set.filter(heasarc__heasarcxteasscat__isnull=False) skymap_sources = get_skymap_sources(dump, request.user).filter(heasarc__heasarcxteasscat__isnull=False) ntotal=skymap_sources.count() selections = Selection.objects.filter(owner=request.user) return render(request,'srgcat/index.html', {'selections':selections, 'skymap_sources':skymap_sources, 'ntotal':ntotal,'srcs':skymap_sources,'dump':dump,}) def get_csv(request): status=srg_group_auth_stats(request, "srg-artxc-survey") if status != 0: return HttpResponse(status_code[status]) dump = SrgDataDump.objects.filter(catalog_loaded=True).latest('date') skymap_sources = dump.skymapsource_set.all() return HttpResponseCSV(skymap_sources, dump, key='iki') def get_xss_csv(request): status=srg_group_auth_stats(request, "srg-artxc-survey") if status != 0: return HttpResponse(status_code[status]) dump = SrgDataDump.objects.filter(catalog_loaded=True).latest('date') skymap_sources = dump.skymapsource_set.filter(heasarc__heasarcxteasscat__isnull=False) return HttpResponseCSV(skymap_sources, dump, key='xss',subclass=HeasarcXTEASSCAT) def show_maxi_gsc(request): status=srg_group_auth_stats(request, "srg-artxc-survey") if status != 0: return HttpResponse(status_code[status]) dump = SrgDataDump.objects.filter(catalog_loaded=True).latest('date') #skymap_sources = dump.skymapsource_set.filter(heasarc__heasarcmaxigschgl__isnull=False) skymap_sources = get_skymap_sources(dump, request.user).filter(heasarc__heasarcmaxigschgl__isnull=False) ntotal=skymap_sources.count() selections = Selection.objects.filter(owner=request.user) return render(request,'srgcat/index.html', {'selections':selections, 'skymap_sources':skymap_sources, 'ntotal':ntotal,'srcs':skymap_sources,'dump':dump,}) def get_maxi_gsc_csv(request): status=srg_group_auth_stats(request, "srg-artxc-survey") if status != 0: return HttpResponse(status_code[status]) dump = SrgDataDump.objects.filter(catalog_loaded=True).latest('date') skymap_sources = dump.skymapsource_set.filter(heasarc__heasarcmaxigschgl__isnull=False) return HttpResponseCSV(skymap_sources, dump, key='maxi_gsc',subclass=HeasarcMAXIGSCHGL) def show_intrefcat(request): status=srg_group_auth_stats(request, "srg-artxc-survey") if status != 0: return HttpResponse(status_code[status]) dump = SrgDataDump.objects.filter(catalog_loaded=True).latest('date') #skymap_sources = dump.skymapsource_set.filter(heasarc__heasarcintrefcat__isnull=False) skymap_sources = get_skymap_sources(dump, request.user).filter(heasarc__heasarcintrefcat__isnull=False) ntotal=skymap_sources.count() selections = Selection.objects.filter(owner=request.user) return render(request,'srgcat/index.html', {'selections':selections, 'skymap_sources':skymap_sources, 'srcs':skymap_sources,'ntotal':ntotal,'dump':dump,}) def show_integral2020(request): status=srg_group_auth_stats(request, "srg-artxc-survey") if status != 0: return HttpResponse(status_code[status]) dump = SrgDataDump.objects.filter(catalog_loaded=True).latest('date') #skymap_sources = dump.skymapsource_set.filter(heasarc__heasarcintrefcat__isnull=False) skymap_sources = get_skymap_sources(dump, request.user).filter(heasarc__heasarcintegral2020__isnull=False) ntotal=skymap_sources.count() selections = Selection.objects.filter(owner=request.user) return render(request,'srgcat/index.html', {'selections':selections, 'skymap_sources':skymap_sources, 'srcs':skymap_sources,'ntotal':ntotal,'dump':dump,}) def get_intrefcat_csv(request): status=srg_group_auth_stats(request, "srg-artxc-survey") if status != 0: return HttpResponse(status_code[status]) dump = SrgDataDump.objects.filter(catalog_loaded=True).latest('date') skymap_sources = dump.skymapsource_set.filter(heasarc__heasarcintrefcat__isnull=False) return HttpResponseCSV(skymap_sources, dump, key='intrefcat', subclass=HeasarcIntRefCat) def show_swiftbat105m(request): status=srg_group_auth_stats(request, "srg-artxc-survey") if status != 0: return HttpResponse(status_code[status]) dump = SrgDataDump.objects.filter(catalog_loaded=True).latest('date') #skymap_sources = dump.skymapsource_set.filter(heasarc__heasarcswiftbat105m__isnull=False) skymap_sources = get_skymap_sources(dump, request.user).filter(heasarc__heasarcswiftbat105m__isnull=False) ntotal=skymap_sources.count() selections = Selection.objects.filter(owner=request.user) return render(request,'srgcat/index.html', {'selections':selections, 'skymap_sources':skymap_sources, 'srcs':skymap_sources,'ntotal':ntotal,'dump':dump,}) def get_swiftbat105m_csv(request): status=srg_group_auth_stats(request, "srg-artxc-survey") if status != 0: return HttpResponse(status_code[status]) dump = SrgDataDump.objects.filter(catalog_loaded=True).latest('date') skymap_sources = dump.skymapsource_set.filter(heasarc__heasarcswiftbat105m__isnull=False) return HttpResponseCSV(skymap_sources, dump, key='swiftbat105m', subclass=HeasarcSwiftBAT105m) def show_rass2rxs(request): status=srg_group_auth_stats(request, "srg-artxc-survey") if status != 0: return HttpResponse(status_code[status]) dump = SrgDataDump.objects.filter(catalog_loaded=True).latest('date') #skymap_sources = dump.skymapsource_set.filter(heasarc__heasarcrass2rxs__isnull=False) skymap_sources = get_skymap_sources(dump, request.user).filter(heasarc__heasarcrass2rxs__isnull=False) ntotal=skymap_sources.count() selections = Selection.objects.filter(owner=request.user) return render(request,'srgcat/index.html', {'selections':selections, 'skymap_sources':skymap_sources, 'srcs':skymap_sources,'ntotal':ntotal,'dump':dump,}) def show_3maxi(request): status=srg_group_auth_stats(request, "srg-artxc-survey") if status != 0: return HttpResponse(status_code[status]) dump = SrgDataDump.objects.filter(catalog_loaded=True).latest('date') cnt = dump.skymapsource_set.count() #skymap_sources = dump.skymapsource_set.filter(heasarc__heasarcxmmsl2__isnull=False) skymap_sources = get_skymap_sources(dump, request.user).filter(heasarc__heasarc3maxi__isnull=False).distinct() ntotal=skymap_sources.count() selections = Selection.objects.filter(owner=request.user) return render(request,'srgcat/index.html', {'selections':selections, 'skymap_sources':skymap_sources, 'srcs':skymap_sources,'ntotal':ntotal,'dump':dump,}) def get_3maxi_csv(request): status=srg_group_auth_stats(request, "srg-artxc-survey") if status != 0: return HttpResponse(status_code[status]) dump = SrgDataDump.objects.filter(catalog_loaded=True).latest('date') #skymap_sources = dump.skymapsource_set.filter(heasarc__heasarcxmmsl2__isnull=False).distinct() skymap_sources = get_skymap_sources(dump, request.user).filter(heasarc__heasarc3maxi__isnull=False).distinct() #print("get_xmmsl2_csv: {}".format(skymap_sources.count())) return HttpResponseCSV(skymap_sources, dump, key='xmmsl2',subclass=Heasarc3MAXI) def show_xmmsl2(request): status=srg_group_auth_stats(request, "srg-artxc-survey") if status != 0: return HttpResponse(status_code[status]) dump = SrgDataDump.objects.filter(catalog_loaded=True).latest('date') cnt = dump.skymapsource_set.count() #print("show_xmmsl2: {} total".format(cnt)) #skymap_sources = dump.skymapsource_set.filter(heasarc__heasarcxmmsl2__isnull=False) skymap_sources = get_skymap_sources(dump, request.user).filter(heasarc__heasarcxmmsl2__isnull=False).distinct() ntotal=skymap_sources.count() #print("show_xmmsl2: {}".format(ntotal)) selections = Selection.objects.filter(owner=request.user) return render(request,'srgcat/index.html', {'selections':selections, 'skymap_sources':skymap_sources, 'srcs':skymap_sources,'ntotal':ntotal,'dump':dump,}) def get_xmmsl2_csv(request): status=srg_group_auth_stats(request, "srg-artxc-survey") if status != 0: return HttpResponse(status_code[status]) dump = SrgDataDump.objects.filter(catalog_loaded=True).latest('date') #skymap_sources = dump.skymapsource_set.filter(heasarc__heasarcxmmsl2__isnull=False).distinct() skymap_sources = get_skymap_sources(dump, request.user).filter(heasarc__heasarcxmmsl2__isnull=False).distinct() #print("get_xmmsl2_csv: {}".format(skymap_sources.count())) return HttpResponseCSV(skymap_sources, dump, key='xmmsl2',subclass=None) def get_rass2rxs_csv(request): status=srg_group_auth_stats(request, "srg-artxc-survey") if status != 0: return HttpResponse(status_code[status]) dump = SrgDataDump.objects.filter(catalog_loaded=True).latest('date') skymap_sources = dump.skymapsource_set.filter(heasarc__heasarcrass2rxs__isnull=False) return HttpResponseCSV(skymap_sources, dump, key='rass2rxs',subclass=HeasarcRASS2RXS) def show_exclude_allsky(request): status=srg_group_auth_stats(request, "srg-artxc-survey") if status != 0: return HttpResponse(status_code[status]) dump = SrgDataDump.objects.filter(catalog_loaded=True).latest('date') sign_threshold=0.0 try: session = UserSessionParameters.objects.get(owner=request.user) if not session.sign_threshold is None: sign_threshold = session.sign_threshold except UserSessionParameters.DoesNotExist: pass select_missed = SelectAllskyMissed.objects.filter(dump=dump) ntotal=0 skymap_sources = [] for s in select_missed: if s.source.sig >= sign_threshold: skymap_sources.append(s.source) ntotal=ntotal+1 selections = Selection.objects.filter(owner=request.user) return render(request,'srgcat/index.html', {'selections':selections, 'skymap_sources':skymap_sources, 'srcs':skymap_sources,'dump':dump,'ntotal':ntotal}) def get_exclude_allsky(request): status=srg_group_auth_stats(request, "srg-artxc-survey") if status != 0: return HttpResponse(status_code[status]) dump = SrgDataDump.objects.filter(catalog_loaded=True).latest('date') select_missed = SelectAllskyMissed.objects.filter(dump=dump) skymap_sources = [] for s in select_missed: skymap_sources.append(s.source) return HttpResponseCSV(skymap_sources, dump, key='exclude_allsky_surveys_') def show_simbad(request): status=srg_group_auth_stats(request, "srg-artxc-survey") if status != 0: return HttpResponse(status_code[status]) artcats = ArtCat.objects.all() dump = SrgDataDump.objects.filter(catalog_loaded=True).latest('date') #skymap_sources = dump.skymapsource_set.exclude(simbad=None) skymap_sources = get_skymap_sources(dump, request.user).exclude(simbad=None) ntotal=skymap_sources.count() selections = Selection.objects.filter(owner=request.user) #skymap_sources = SkyMapSource.objects.exclude(simbad=None).order_by('created') return render(request,'srgcat/index.html', {'selections':selections, 'artcats': artcats, 'skymap_sources':skymap_sources,'ntotal':ntotal,'srcs':skymap_sources,'dump':dump,}) def show_latest(request): status=srg_group_auth_stats(request, "srg-artxc-survey") if status != 0: return HttpResponse(status_code[status]) artcats = ArtCat.objects.all() dump = SrgDataDump.objects.filter(catalog_loaded=True).latest('date') skymaps = dump.skymap.all() skymap_sources = dump.skymapsource_set.filter(new=True) ntotal=skymap_sources.count() survey = Survey.objects.get(Q(start__lt=dump.date) & Q(stop__gt=dump.date)) surveypaths = survey.surveypath_set.all() selections = Selection.objects.filter(owner=request.user) return render(request,'srgcat/index.html', {'selections':selections, 'artcats': artcats, 'skymap_sources':skymap_sources, 'ntotal':ntotal, 'srcs':skymap_sources, 'dump':dump, 'survey':survey, 'surveypaths':surveypaths,}) def show_srg_data_dumps(request): status=srg_group_auth_stats(request, "srg-artxc-survey") if status != 0: return HttpResponse(status_code[status]) ddumps = SrgDataDump.objects.all().order_by("-date") ntotal = ddumps.count() return render(request,'srgcat/ddumps.html', {'ddumps': ddumps,'ntotal':ntotal,}) def show_data_dump(request, dump_id): status=srg_group_auth_stats(request, "srg-artxc-survey") if status != 0: return HttpResponse(status_code[status]) try: dump=SrgDataDump.objects.get(pk=dump_id) except: return HttpResponse("This data dump was not found") try: survey = Survey.objects.get(Q(start__lt=dump.date) & Q(stop__gt=dump.date)) surveypaths = survey.surveypath_set.all().order_by('obt') except: survey=None surveypaths=None pass skymap_sources = dump.skymapsource_set.all() return render(request,'srgcat/ddumps.html', {'dump':dump,'skymap_sources':skymap_sources,'surveypaths':surveypaths,}) def update_catalog_data_dump(request, dump_id): status=srg_group_auth_stats(request, "srg-iki-admin") if status != 0: return HttpResponse(status_code[status]) dump = get_object_or_404(SrgDataDump, pk=dump_id) dump.catalog_loaded = False dump.save() ddumps = SrgDataDump.objects.all().order_by("-date") ntotal = ddumps.count() return render(request,'srgcat/ddumps.html', {'ddumps':ddumps,}) def show_skymap(request, skymap_id): status=srg_group_auth_stats(request, "srg-artxc-survey") if status != 0: return HttpResponse(status_code[status]) try: skymap=SkyMaps.objects.get(pk=skymap_id) except: return HttpResponse("This sky map was not found") related_dumps = skymap.srgdatadump_set.all().order_by('-date') dump = SrgDataDump.objects.filter(catalog_loaded=True).latest('date') skymap_sources = dump.skymapsource_set.filter(Q(skymap=skymap) & Q(bad=False)) skymaps = [] for plate in skymap.survey_healpix_plate.all(): skymaps.append(plate.healpix) swiftbat = HeasarcBase.objects.instance_of(HeasarcSwiftBAT105m).filter(healpix_plate__in=skymaps) intrefcat = HeasarcBase.objects.instance_of(HeasarcIntRefCat).filter(healpix_plate__in=skymaps) rosat = HeasarcBase.objects.instance_of(HeasarcRASS2RXS).filter(healpix_plate__in=skymaps) return render(request,'srgcat/skymap.html', {'intrefcat':intrefcat,'skymaps':skymaps, 'rosat':rosat,'swiftbat':swiftbat, 'skymap':skymap,'skymap_sources':skymap_sources, 'related_dumps':related_dumps,}) def show_skymap_radec(request, skymap_id, ra, dec): status=srg_group_auth_stats(request, "srg-artxc-survey") if status != 0: return HttpResponse(status_code[status]) try: skymap=SkyMaps.objects.get(pk=skymap_id) except: return HttpResponse("This sky map was not found") related_dumps = skymap.srgdatadump_set.all().order_by('-date') dump = SrgDataDump.objects.filter(catalog_loaded=True).latest('date') skymap_sources = dump.skymapsource_set.filter(Q(skymap=skymap) & Q(bad=False)) skymaps = [] for plate in skymap.survey_healpix_plate.all(): skymaps.append(plate.healpix) swiftbat = HeasarcBase.objects.instance_of(HeasarcSwiftBAT105m).filter(healpix_plate__in=skymaps) intrefcat = HeasarcBase.objects.instance_of(HeasarcIntRefCat).filter(healpix_plate__in=skymaps) rosat = HeasarcBase.objects.instance_of(HeasarcRASS2RXS).filter(healpix_plate__in=skymaps) return render(request,'srgcat/skymap.html', {'intrefcat':intrefcat,'skymaps':skymaps, 'rosat':rosat,'swiftbat':swiftbat, 'skymap':skymap,'skymap_sources':skymap_sources, 'related_dumps':related_dumps,'target_ra':ra,'target_dec':dec}) def show_field_radec(request, field, ra, dec): """ the same as show_field_radec, but query field number rather than skymap.id """ status=srg_group_auth_stats(request, "srg-artxc-survey") if status != 0: return HttpResponse(status_code[status]) try: skymap=SkyMaps.objects.get(SMAPNR=field) except: return HttpResponse("This sky map was not found") related_dumps = skymap.srgdatadump_set.all().order_by('-date') dump = SrgDataDump.objects.filter(catalog_loaded=True).latest('date') skymap_sources = dump.skymapsource_set.filter(Q(skymap=skymap) & Q(bad=False)) skymaps = [] for plate in skymap.survey_healpix_plate.all(): skymaps.append(plate.healpix) swiftbat = HeasarcBase.objects.instance_of(HeasarcSwiftBAT105m).filter(healpix_plate__in=skymaps) intrefcat = HeasarcBase.objects.instance_of(HeasarcIntRefCat).filter(healpix_plate__in=skymaps) rosat = HeasarcBase.objects.instance_of(HeasarcRASS2RXS).filter(healpix_plate__in=skymaps) return render(request,'srgcat/skymap.html', {'intrefcat':intrefcat,'skymaps':skymaps, 'rosat':rosat,'swiftbat':swiftbat, 'skymap':skymap,'skymap_sources':skymap_sources, 'related_dumps':related_dumps,'target_ra':ra,'target_dec':dec}) def show_skymap_by_name(request, skymap_id): status=srg_group_auth_stats(request, "srg-artxc-survey") if status != 0: return HttpResponse(status_code[status]) try: skymap=SkyMaps.objects.get(SMAPNR=skymap_id) except: return HttpResponse("This sky map was not found") related_dumps = skymap.srgdatadump_set.all().order_by('-date') return render(request,'srgcat/skymap.html', {'skymap':skymap,'related_dumps':related_dumps,}) def show_dump_skymap(request, dump_id, skymap_id): status=srg_group_auth_stats(request, "srg-artxc-survey") if status != 0: return HttpResponse(status_code[status]) try: dump=SrgDataDump.objects.get(pk=dump_id) except: return HttpResponse("This data dump was not found") try: skymap=SkyMaps.objects.get(pk=skymap_id) except: return HttpResponse("This sky map was not found") related_dumps = skymap.srgdatadump_set.all().order_by('-date') try: survey = Survey.objects.get(Q(start__lt=dump.date) & Q(stop__gt=dump.date)) except: survey = None skymaps = [] for plate in skymap.survey_healpix_plate.all(): skymaps.append(plate.healpix) rosat = HeasarcBase.objects.instance_of(HeasarcRASS2RXS).filter(healpix_plate__in=skymaps) intrefcat = HeasarcBase.objects.instance_of(HeasarcIntRefCat).filter(healpix_plate__in=skymaps) swiftbat = HeasarcBase.objects.instance_of(HeasarcSwiftBAT105m).filter(healpix_plate__in=skymaps) return render(request,'srgcat/skymap.html', {'intrefcat':intrefcat, 'rosat':rosat,'swiftbat':swiftbat, 'survey':survey, 'dump':dump, 'skymap':skymap, 'related_dumps':related_dumps,}) def download_selection(request, selection_id): """ Delete new Selection """ status=srg_group_auth_stats(request, "srg-artxc-survey") if status != 0: return HttpResponse(status_code[status]) try: selection=Selection.objects.get(pk=selection_id) except: return HttpResponse("This selection was not found") if not (selection.public or selection.owner == request.user): return HttpResponse("You are trying to download not your (and private) Selection") return HttpResponseCSV(selection.skymap_sources.all(), key="{}".format(selection.slug)) def delete_selection(request, selection_id): """ Delete new Selection """ status=srg_group_auth_stats(request, "srg-artxc-survey") if status != 0: return HttpResponse(status_code[status]) try: selection=Selection.objects.get(pk=selection_id) except: return HttpResponse("This selection was not found") if(selection.owner != request.user): return HttpResponse("You are trying to delete not your Selection") selection.delete() selections = Selection.objects.filter(owner=request.user) return render(request, 'srgcat/edit_all_selections.html', {'selections': selections,}) def edit_all_selections(request): """ Edit all Selection """ status=srg_group_auth_stats(request, "srg-artxc-survey") if status != 0: return HttpResponse(status_code[status]) selections = Selection.objects.filter(owner=request.user) return render(request, 'srgcat/edit_all_selections.html', {'selections': selections,}) def edit_selection(request, selection_id): """ Create new Selection """ status=srg_group_auth_stats(request, "srg-artxc-survey") if status != 0: return HttpResponse(status_code[status]) try: selection=Selection.objects.get(pk=selection_id) except: return HttpResponse("This selection was not found") if(selection.owner != request.user): return HttpResponse("You are trying to edit not your Selection") if request.method == 'POST': form = SelectionForm(request.POST) if form.is_valid(): name=form.cleaned_data['name'] slug=form.cleaned_data['slug'] public=form.cleaned_data['public'] if (selection.slug != slug): """ if user changed slug, check it """ if(Selection.objects.filter(owner=request.user).filter(slug=slug).exists()): return render(request, 'srgcat/selection.html', {'form': form, 'message':"Short name \"{}\" for user {} is already exists".format(slug,request.user),}) selection.slug=slug selection.name=name selection.public=public selection.save() #return HttpResponseRedirect(reverse('art-xc survey index')) selections = Selection.objects.filter(owner=request.user) return render(request, 'srgcat/edit_all_selections.html', {'selections': selections,}) else: form = SelectionForm(instance=selection) selections = Selection.objects.filter(owner=request.user) return render(request, 'srgcat/selection.html', {'form': form,'selections':selections,}) def user_session_parameters(request): """ Edit user session parameters """ status=srg_group_auth_stats(request, "srg-artxc-survey") if status != 0: return HttpResponse(status_code[status]) if request.method == 'POST': form = UserSessionParametersForm(request.POST) if form.is_valid(): sign_threshold=form.cleaned_data['sign_threshold'] target_ra=form.cleaned_data['target_ra'] target_dec=form.cleaned_data['target_dec'] try: session = UserSessionParameters.objects.get(owner=request.user) except UserSessionParameters.DoesNotExist: session=form.save(commit=False) session.owner=request.user session.save() session.sign_threshold = sign_threshold session.target_ra = target_ra session.target_dec = target_dec session.save() selections = Selection.objects.filter(owner=request.user) return render(request, 'srgcat/session.html', {'selections': selections,'form':form,'session':session,}) else: #form = UserSessionParametersForm() pass try: session = UserSessionParameters.objects.get(owner=request.user) except UserSessionParameters.DoesNotExist: session = UserSessionParameters() session.owner=request.user session.save() form = UserSessionParametersForm(instance=session) selections = Selection.objects.filter(owner=request.user) return render(request, 'srgcat/session.html', {'form': form,'selections':selections,'session':session,}) def create_new_selection(request): """ Create new Selection """ status=srg_group_auth_stats(request, "srg-artxc-survey") if status != 0: return HttpResponse(status_code[status]) if request.method == 'POST': form = SelectionForm(request.POST) if form.is_valid(): name=form.cleaned_data['name'] slug=form.cleaned_data['slug'] public=form.cleaned_data['public'] if(Selection.objects.filter(owner=request.user).filter(slug=slug).exists()): return render(request, 'srgcat/selection.html', {'form': form, 'message':"Short name \"{}\" for user {} is already exists".format(slug,request.user),}) selection=form.save(commit=False) selection.owner=request.user selection.save() selections = Selection.objects.filter(owner=request.user) return render(request, 'srgcat/selection.html', {'selections': selections,}) else: form = SelectionForm() selections = Selection.objects.filter(owner=request.user) return render(request, 'srgcat/selection.html', {'form': form,'selections':selections,}) def get_name(request): """ Get source name """ if request.method == 'POST': form = SourceNameForm(request.POST) if form.is_valid(): ra=float(form.cleaned_data['ra']) dec=float(form.cleaned_data['dec']) name=make_source_name('SRG',ra,dec) return render(request, 'srgcat/source_name.html', {'form': form, 'name':name,}) else: form = SourceNameForm() return render(request, 'srgcat/source_name.html', {'form': form}) def show_skymap_form(request): """ Get target in survey """ # if this is a POST request we need to process the form data if request.method == 'POST': # create a form instance and populate it with data from the request: form = SkyMapForm(request.POST) # check whether it's valid: if form.is_valid(): # process the data in form.cleaned_data as required # ... # redirect to a new URL: #return HttpResponseRedirect('/srgcat/srga') skymap_id=int(form.cleaned_data['skymap']) try: skymap=SkyMaps.objects.get(SMAPNR=skymap_id) except: return HttpResponse("This sky map was not found") return render(request, 'srgcat/skymap.html', {'form': form,'skymap':skymap,}) # if a GET (or any other method) we'll create a blank form else: form = SkyMapForm() return render(request, 'srgcat/skymap.html', {'form': form}) def get_target_survey_post(request): """ Get target in survey """ # if this is a POST request we need to process the form data if request.method == 'POST': # create a form instance and populate it with data from the request: form = LookupTargetForm(request.POST) # check whether it's valid: if form.is_valid(): # process the data in form.cleaned_data as required # ... # redirect to a new URL: #return HttpResponseRedirect('/srgcat/srga') ra=float(form.cleaned_data['ra']) dec=float(form.cleaned_data['dec']) load_surveypath=form.cleaned_data['load_surveypath'] #name=make_source_name('SRG',ra,dec) hp = HEALPix(nside=NSIDE_PLATES, order=ORDER, frame=FK5()) crd = SkyCoord(ra, dec, frame="fk5", unit="deg") heal = hp.skycoord_to_healpix(crd) plate=SurveyHealpixPlate.objects.get(healpix=heal) surveys = plate.survey.all() skymaps = plate.skymaps_set.all().annotate(separation=Value(0.0, output_field=DecimalField())) c = SkyCoord(ra, dec, frame="fk5", unit="deg") for smap in skymaps: c0 = SkyCoord(smap.RA_CEN, smap.DE_CEN, frame="fk5", unit="deg") smap.separation=c.separation(c0).arcmin return render(request, 'srgcat/target_survey.html', {'form': form, 'ra_cen':ra, 'dec_cen':dec, 'load_surveypath':load_surveypath, 'plate':plate,'surveys':surveys,'skymaps':skymaps,}) # if a GET (or any other method) we'll create a blank form else: form = LookupTargetForm() return render(request, 'srgcat/target_survey.html', {'form': form}) def get_target_survey_get(request): """ Get target in survey """ # if this is a GET request we need to process the form data if request.method == 'GET': # create a form instance and populate it with data from the request: form = LookupTargetForm(request.GET) # check whether it's valid: if form.is_valid(): # process the data in form.cleaned_data as required # ... # redirect to a new URL: #return HttpResponseRedirect('/srgcat/srga') ra=float(form.cleaned_data['ra']) dec=float(form.cleaned_data['dec']) load_surveypath=form.cleaned_data['load_surveypath'] name=make_source_name('SRG',ra,dec) hp = HEALPix(nside=NSIDE_PLATES, order=ORDER, frame=FK5()) crd = SkyCoord(ra, dec, frame="fk5", unit="deg") heal = hp.skycoord_to_healpix(crd) plate=SurveyHealpixPlate.objects.get(healpix=heal) surveys = plate.survey.all() return render(request, 'srgcat/target_survey.html', {'form': form, 'ra_cen':ra, 'dec_cen':dec, 'load_surveypath':load_surveypath, 'name':name, 'plate':plate, 'surveys':surveys}) # if a GET (or any other method) we'll create a blank form else: form = LookupTargetForm() return render(request, 'srgcat/target_survey.html', {'form': form}) def show_cat(request, cat_id): status=srg_group_auth_stats(request, "srg-artxc-survey") if status != 0: return HttpResponse(status_code[status]) try: cat=ArtCat.objects.get(pk=cat_id) except: return HttpResponse("This catalog was not found") artcats = ArtCat.objects.all() srcs=cat.artsource_set.all().order_by("-sign") return render(request,'srgcat/index.html', {'artcats': artcats,'cat':cat,'srcs':srcs,}) def show_artsource(request, artsource_id): status=srg_group_auth_stats(request, "srg-artxc-survey") if status != 0: return HttpResponse(status_code[status]) try: src=ArtSource.objects.get(pk=artsource_id) except: return HttpResponse("This ArtSource was not found") artcats = ArtCat.objects.all() cat = src.catalog heasarcs = src.heasarc.all().annotate(separation=Value(0.0, output_field=DecimalField())) c = SkyCoord(src.ra, src.dec, frame="fk5", unit="deg") for heasarc in heasarcs: c0 = SkyCoord(heasarc.ra, heasarc.dec, frame="fk5", unit="deg") sep=c.separation(c0) heasarc.separation=sep.arcsecond return render(request,'srgcat/index.html', {'artcats': artcats,'cat':cat,'src':src,'heasarcs':heasarcs,}) def show_skymapsource(request, skymapsource_id): status=srg_group_auth_stats(request, "srg-artxc-survey") if status != 0: return HttpResponse(status_code[status]) try: src=SkyMapSource.objects.get(pk=skymapsource_id) except: return HttpResponse("This SkyMapSource was not found") heasarcs = src.heasarc.all().annotate(separation=Value(0.0, output_field=DecimalField())) c = SkyCoord(src.ra, src.dec, frame="fk5", unit="deg") for heasarc in heasarcs: heasarc.separation=c.separation(SkyCoord(heasarc.ra, heasarc.dec, frame="fk5", unit="deg")).arcsecond """ gaia = src.gaia.all().annotate(separation=Value(0.0, output_field=DecimalField())) for gaiasrc in gaia: gaiasrc.separation=c.separation(SkyCoord(gaiasrc.ra, gaiasrc.dec, frame="fk5", unit="deg")).arcsecond """ simbad = src.simbad.all().annotate(separation=Value(0.0, output_field=DecimalField())) for simsrc in simbad: simsrc.separation=c.separation(SkyCoord(simsrc.ra, simsrc.dec, frame="fk5", unit="deg")).arcsecond return render(request,'srgcat/index.html', {'src':src,'cat':src.skymap, 'heasarcs':heasarcs, 'simbad':simbad,})