889 lines
38 KiB
Python
889 lines
38 KiB
Python
""" Describes HEASARC catalogs
|
|
|
|
HEASARC classes describe all X-ray catalogs used for cross-match, including these not imported from HEASARC itself.
|
|
"""
|
|
|
|
from django.db import models
|
|
from django import forms
|
|
import urllib.parse
|
|
|
|
from polymorphic.models import PolymorphicModel
|
|
|
|
from nasa.models import Ads
|
|
|
|
#from astrobasis.models import GAIADR2
|
|
from astrobasis.models import GAIADR3
|
|
from astrobasis.models import GLIMPSE
|
|
from astrobasis.models import VLASS
|
|
from astrobasis.models import TwoMASS
|
|
from astrobasis.models import AllWise
|
|
from astrobasis.models import AstroBasisUserCat
|
|
|
|
# Create your models here.
|
|
|
|
INPUT_DATA_DIR = '/export/heasarc'
|
|
|
|
#
|
|
# HeasarcTable and TableColumn describe HEASARC tables in separate (non-Django) database "heasarc_db"
|
|
#
|
|
|
|
class HeasarcTable(models.Model):
|
|
"""HeasarcTable contains HEASARC table description
|
|
|
|
Together with :class:`TableColumn`, HeasarcTable describes HEASARC table. The catalog itself is not placed here, instead, HEASARC source catalogs are stored in child classes of :class:`HeasarcBase` parent class.
|
|
"""
|
|
name = models.CharField(max_length=36,blank=True, unique=True, default='')
|
|
""" Table name """
|
|
description = models.CharField(max_length=120,blank=True, default='')
|
|
""" Table description """
|
|
document_url = models.URLField(max_length=120,blank=True, default='')
|
|
""" External link to HEASARC table description """
|
|
search_radius = models.IntegerField(default=0)
|
|
""" Default search radius for this HEASARC catalog """
|
|
frequency_regime = models.CharField(max_length=36,blank=True, default='')
|
|
""" Wavelengthy domain (radio, x-ray, gamma, ...) """
|
|
observatory_name = models.CharField(max_length=36,blank=True, default='')
|
|
""" Observatory name """
|
|
security = models.CharField(max_length=36,blank=True, default='')
|
|
""" Access parameters """
|
|
parameter_defaults = models.CharField(max_length=1000,blank=True, default='')
|
|
""" The list of default parameters """
|
|
declination = models.CharField(max_length=36,blank=True, default='')
|
|
""" Declination """
|
|
right_ascension = models.CharField(max_length=36,blank=True, default='')
|
|
""" Right Ascension """
|
|
author = models.CharField(max_length=36,blank=True, default='')
|
|
""" Author of catalog """
|
|
bibcode = models.CharField(max_length=36,blank=True, default='')
|
|
""" Bibcode of the catalog (if available) """
|
|
def __str__(self):
|
|
return "%s" % (self.name)
|
|
def get_absolute_url(self):
|
|
return "/heasarc/%i/table" % (self.pk)
|
|
|
|
class TableColumn(models.Model):
|
|
""" Describes columns of HEASARC Table
|
|
|
|
Each column description is linked to the corresponding :class:`HeasarcTable` class.
|
|
"""
|
|
table = models.ForeignKey(HeasarcTable, on_delete=models.CASCADE)
|
|
""" Related :class:`HeasarcTable` class """
|
|
name = models.CharField(max_length=36,blank=True, default='')
|
|
""" Name of the column """
|
|
tdat_type = models.CharField(max_length=200,blank=True, default='')
|
|
""" Format of the column stored in TDAT file.
|
|
|
|
This field is not actually used, python automatilally assigns type."""
|
|
description = models.CharField(max_length=120,blank=True, default='')
|
|
""" Description of the column """
|
|
def __str__(self):
|
|
return "%s: %s" % (self.table.name, self.name)
|
|
|
|
class HeasarcObjectClass(models.Model):
|
|
""" Describes astrophysical type of the X-ray source used in HEASARC """
|
|
table = models.ForeignKey(HeasarcTable, on_delete=models.CASCADE)
|
|
""" Link to the corresponding :class:`HeasarcTable` class """
|
|
class_name = models.CharField(max_length=120,blank=True, default='')
|
|
""" Classification Name """
|
|
class_id = models.IntegerField(default=0)
|
|
""" Classification ID """
|
|
ordering = ['-class_id',]
|
|
""" default sorting """
|
|
def __str__(self):
|
|
return "%d: %s" % (self.class_id, self.class_name)
|
|
|
|
class HeasarcSimpleClass(models.Model):
|
|
class_name = models.CharField(max_length=120,blank=True, default='')
|
|
""" Classification Name """
|
|
class_id = models.IntegerField(default=0)
|
|
""" Classification ID """
|
|
ordering = ['-class_id',]
|
|
""" default sorting """
|
|
def __str__(self):
|
|
return self.class_name
|
|
def get_artsurvey_count(self, survey):
|
|
return self.artsurveysource_set.filter(survey=survey).count()
|
|
def get_artsurvey_count_all(self):
|
|
return self.artsurveysource_set.count()
|
|
#
|
|
# Use PolymorphicModel for HEASARC tables in Django:
|
|
#
|
|
|
|
NSIDE_SOURCES=2048
|
|
ORDER='nested'
|
|
|
|
class HeasarcBase(PolymorphicModel):
|
|
""" Parennt class for all HEASARC catalogs
|
|
|
|
This class contains all fields that common for all HEASARC catalogs,
|
|
like RA, Dec and source name.
|
|
"""
|
|
#table = models.ForeignKey(HeasarcTable, null=True, on_delete=models.SET_NULL)
|
|
healpix = models.BigIntegerField(db_index=True, default=0)
|
|
healpix_plate = models.IntegerField(db_index=True, default=0)
|
|
ra = models.FloatField(default=0.0)
|
|
""" Right Ascension of the Source """
|
|
dec = models.FloatField(default=0.0)
|
|
""" Declination of the Source """
|
|
lii = models.FloatField(default=0.0)
|
|
""" Galactic Longitude """
|
|
bii = models.FloatField(default=0.0)
|
|
""" Galactic Latitude """
|
|
error_radius = models.FloatField(default=0.0)
|
|
""" Positional Uncertainty (arcsec) """
|
|
erosita_flux = models.FloatField(default=0.0)
|
|
""" Expected eRosita flux in 0.5-2 keV """
|
|
name = models.CharField(max_length=50,blank=True, default='')
|
|
""" Source name """
|
|
gaia3 = models.ManyToManyField(GAIADR3)
|
|
gaia3_primary = models.ForeignKey(GAIADR3, null=True, blank=True, related_name='heasarcbase_primary', on_delete=models.SET_NULL)
|
|
|
|
allwise = models.ManyToManyField(AllWise)
|
|
allwise_primary = models.ForeignKey(AllWise, null=True, blank=True, related_name='heasarcbase_primary', on_delete=models.SET_NULL)
|
|
|
|
glimpse = models.ManyToManyField(GLIMPSE)
|
|
glimpse_primary = models.ForeignKey(GLIMPSE, null=True, blank=True, related_name='heasarcbase_primary', on_delete=models.SET_NULL)
|
|
|
|
vlass = models.ManyToManyField(VLASS)
|
|
vlass_primary = models.ForeignKey(VLASS, null=True, blank=True, related_name='heasarcbase_primary', on_delete=models.SET_NULL)
|
|
|
|
twomass = models.ManyToManyField(TwoMASS)
|
|
twomass_primary = models.ForeignKey(TwoMASS, null=True, blank=True, related_name='heasarcbase_primary', on_delete=models.SET_NULL)
|
|
|
|
usercat = models.ManyToManyField(AstroBasisUserCat)
|
|
|
|
ads = models.ForeignKey(Ads, null=True, blank=True, related_name='heasarcbase_primary', on_delete=models.SET_NULL)
|
|
|
|
class Meta:
|
|
ordering = ['-id']
|
|
|
|
def description(self):
|
|
return self.__class__.__name__
|
|
def get_base_url(self):
|
|
return "/heasarc/%i/" % (self.pk)
|
|
|
|
def get_ads_url(self):
|
|
return "https://ui.adsabs.harvard.edu/search/q=object%3A%22{}%22&sort=date%20desc%2C%20bibcode%20desc&p_=0".format(urllib.parse.quote_plus(self.name))
|
|
|
|
def get_new_astrobasis_url(self):
|
|
return "/astrobasis/%i/source" % (self.pk)
|
|
|
|
def __str__(self):
|
|
return self.name
|
|
|
|
class HeasarcXrayMaster(HeasarcBase):
|
|
""" Base X-ray Master Table
|
|
|
|
The XRAY database table contains selected parameters from
|
|
almost all HEASARC X-ray catalogs that have source positions
|
|
located to better than a few arcminutes.
|
|
"""
|
|
|
|
database_table = models.CharField(max_length=120, blank=True, default='')
|
|
""" Database Table This Entry Comes From """
|
|
count_rate = models.FloatField(default=0.0)
|
|
""" Count Rate (counts/sec) """
|
|
count_rate_error = models.FloatField(default=0.0)
|
|
""" Error in Count Rate """
|
|
flux = models.FloatField(default=0.0)
|
|
""" Flux (erg/cm^2/s) """
|
|
exposure = models.FloatField(default=0.0)
|
|
""" Exposure Time (seconds) """
|
|
class_id = models.IntegerField(default=0)
|
|
""" Browse Object Classification """
|
|
object_class = models.ForeignKey(HeasarcObjectClass, on_delete=models.SET_NULL, null=True)
|
|
""" Related object in HeasarcObjectClass """
|
|
observatory = models.CharField(max_length=50,blank=True, default='')
|
|
""" Observatory or Mission Name That Originated the Database Table """
|
|
def __str__(self):
|
|
return "%s: %s" % (self.database_table, self.observatory)
|
|
def get_absolute_url(self):
|
|
return "/heasarc/%i/xray" % (self.pk)
|
|
|
|
class HeasarcSwiftBAT105m(HeasarcBase):
|
|
""" Swift BAT 105-Month Hard X-ray Survey
|
|
|
|
https://swift.gsfc.nasa.gov/results/bs105mon/
|
|
|
|
BAT_NAME| RA| DEC| SNR| COUNTERPART_NAME|
|
|
OTHER_NAME| CTPT_RA|CTPT_DEC| FLUX| FLUX_LO| FLUX_HI|
|
|
CONTA|GAMM|GAMM|GAMM| CHI_SQ_R|REDSHIF| LUM|ASSOC_STREN|
|
|
CL2| TYPE
|
|
|
|
"""
|
|
snr = models.FloatField(default=0.0)
|
|
counterpart_name = models.CharField(max_length=30, blank=True, default='')
|
|
flux = models.FloatField(default=0.0)
|
|
flux_lo = models.FloatField(default=0.0)
|
|
flux_hi = models.FloatField(default=0.0)
|
|
redshift = models.FloatField(default=0.0)
|
|
lum = models.FloatField(default=0.0)
|
|
class_id = models.IntegerField(default=0)
|
|
ref_id = models.IntegerField(default=0)
|
|
otype = models.CharField(max_length=25, blank=True, default='')
|
|
def get_nasa_url(self):
|
|
return "https://swift.gsfc.nasa.gov/results/bs105mon/%i" % (self.ref_id)
|
|
|
|
class HeasarcXMMSL2(HeasarcBase):
|
|
flux_b8 = models.FloatField(default=0.0)
|
|
flux_b7 = models.FloatField(default=0.0)
|
|
class_id = models.IntegerField(default=0)
|
|
sourcenum = models.IntegerField(default=0)
|
|
obsid = models.CharField(max_length=10, blank=True, default='')
|
|
object_class = models.ForeignKey(HeasarcObjectClass, on_delete=models.SET_NULL, null=True)
|
|
ver_inext = models.CharField(max_length=1, blank=True, default='')
|
|
""" Flag Indicates Detection within Extended Source and Is Probably Spurious """
|
|
ver_halo = models.CharField(max_length=1, blank=True, default='')
|
|
""" Flag Indicates Detection within Halo of Very Bright Source, Probably Spurious """
|
|
ver_hibgnd = models.CharField(max_length=1, blank=True, default='')
|
|
""" Flag Indicates Detection within High-Background Region and Is Probably Spurious """
|
|
ver_nredg = models.CharField(max_length=1, blank=True, default='')
|
|
""" Flag Indicates Detection in Consecutive Images, Likely Inaccurate Position """
|
|
ver_psusp = models.CharField(max_length=1, blank=True, default='')
|
|
""" Flag Indicates Source Position Likely Inaccurate, Poor Attitude Reconstruction """
|
|
ver_false = models.CharField(max_length=1, blank=True, default='')
|
|
""" Flag Indicates Problems Not Included in the Other Flags, e.g. Zero Exposure """
|
|
flag_comment = models.CharField(max_length=40, blank=True, default='')
|
|
""" Comment Which Explains Why a Particular Source Flag Has Been Set to True"""
|
|
def get_absolute_url(self):
|
|
return "/heasarc/%i/xmmsl2" % (self.pk)
|
|
|
|
class HeasarcIntegral9(HeasarcBase):
|
|
""" INTEGRAL 9-year catalog """
|
|
|
|
source_type = models.CharField(max_length=15, blank=True, default='')
|
|
flux = models.FloatField(default=0.0)
|
|
flux_error = models.FloatField(default=0.0)
|
|
class_id = models.IntegerField(default=0)
|
|
object_class = models.ForeignKey(HeasarcObjectClass, on_delete=models.SET_NULL, null=True)
|
|
|
|
class HeasarcIntegral2020(HeasarcBase):
|
|
""" INTEGRAL 2020 catalog """
|
|
flux = models.FloatField(default=0.0)
|
|
flux_error = models.FloatField(default=0.0)
|
|
sign = models.FloatField(default=0.0)
|
|
ref_id = models.IntegerField(default=0)
|
|
|
|
|
|
class HeasarcIntRefCat(HeasarcBase):
|
|
""" INTEGRAL ISDC catalog """
|
|
|
|
class_id = models.IntegerField(default=0)
|
|
object_class = models.ForeignKey(HeasarcObjectClass, on_delete=models.SET_NULL, null=True)
|
|
|
|
"""
|
|
parameter_defaults detid srcid name ra dec time ep_8_flux ep_8_flux_error pn_8_flux pn_8_flux_error m1_8_flux m1_8_flux_error m2_8_flux m2_8_flux_error
|
|
"""
|
|
class HeasarcXMMSSC(HeasarcBase):
|
|
""" Sub-class of :class:`HeasarcBase` which describes XMM catalog """
|
|
detid = models.CharField(max_length=15, blank=True, default='')
|
|
""" Unique Catalog Entry (and Detection) Identifier """
|
|
srcid = models.CharField(max_length=15, blank=True, default='')
|
|
""" Unique Source Identifier """
|
|
time = models.FloatField(default=0.0)
|
|
""" Start Time of Observation (MJD) """
|
|
end_time = models.FloatField(default=0.0)
|
|
""" End Time of Observation (MJD) """
|
|
ep_8_flux = models.FloatField(default=0.0)
|
|
""" EPIC Total Band Flux (erg/cm^2/s) """
|
|
ep_8_flux_error = models.FloatField(default=0.0)
|
|
""" Uncertainty in EPIC Total Band Flux (erg/cm^2/s) """
|
|
pn_8_flux = models.FloatField(default=0.0)
|
|
""" PN Total Band Flux (erg/cm^2/s) """
|
|
pn_8_flux_error = models.FloatField(default=0.0)
|
|
""" Uncertainty in PN Total Band Flux (erg/cm^2/s) """
|
|
m1_8_flux = models.FloatField(default=0.0)
|
|
""" M1 Total Band Flux (erg/cm^2/s) """
|
|
m1_8_flux_error = models.FloatField(default=0.0)
|
|
""" Uncertainty in M1 Total Band Flux (erg/cm^2/s) """
|
|
m2_8_flux = models.FloatField(default=0.0)
|
|
""" M2 Total Band Flux (erg/cm^2/s) """
|
|
m2_8_flux_error = models.FloatField(default=0.0)
|
|
""" Uncertainty in M2 Total Band Flux (erg/cm^2/s) """
|
|
ep_1_flux = models.FloatField(default=0.0)
|
|
""" EPIC Band 1 Flux (erg/cm^2/s) """
|
|
ep_1_flux_error = models.FloatField(default=0.0)
|
|
""" Uncertainty in EPIC Band 1 Flux (erg/cm^2/s) """
|
|
ep_2_flux = models.FloatField(default=0.0)
|
|
""" EPIC Band 2 Flux (erg/cm^2/s) """
|
|
ep_2_flux_error = models.FloatField(default=0.0)
|
|
""" Uncertainty in EPIC Band 2 Flux (erg/cm^2/s) """
|
|
ep_3_flux = models.FloatField(default=0.0)
|
|
""" EPIC Band 3 Flux (erg/cm^2/s) """
|
|
ep_3_flux_error = models.FloatField(default=0.0)
|
|
""" Uncertainty in EPIC Band 3 Flux (erg/cm^2/s) """
|
|
sum_flag = models.IntegerField(default=0)
|
|
""" Summary Flag of the Source: 0= good, 1=warning, 2=possibly spurious """
|
|
sc_extent= models.FloatField(default=0.0)
|
|
""" Mean Source Equivalent Total Band Extent Radius (arcsec) """
|
|
sc_ext_ml= models.FloatField(default=0.0)
|
|
""" Mean Source Equivalent Total Band Detection Likelihood of the Extended Source """
|
|
def get_absolute_url(self):
|
|
return "/heasarc/%i/xmmssc" % (self.pk)
|
|
def get_xmmssc_srcid_url(self):
|
|
return "http://xmm-catalog.irap.omp.eu/source/%s" % (self.srcid)
|
|
def get_strasbourg_srcid_url(self):
|
|
return "http://xcatdb.unistra.fr/3xmmdr8/?mode=catalog&srcid=%s" % (self.srcid)
|
|
def get_xmmssc_detid_url(self):
|
|
return "http://xmm-catalog.irap.omp.eu/detection/%s" % (self.detid)
|
|
|
|
class HeasarcCHANMASTER(HeasarcBase):
|
|
""" Sub-class of :class:`HeasarcBase` which describes Chandra Master catalog """
|
|
obsid = models.CharField(max_length=5, blank=True, default='00000')
|
|
""" Observation Identifier """
|
|
status = models.CharField(max_length=20, blank=True, default='')
|
|
""" Status of Observation """
|
|
time = models.FloatField(default=0.0)
|
|
""" Start Time of Observation (UTC) """
|
|
detector = models.CharField(max_length=6, blank=True, default='')
|
|
""" Detector """
|
|
grating = models.CharField(max_length=6, blank=True, default='')
|
|
""" Grating Setting """
|
|
exposure = models.FloatField(default=0.0)
|
|
""" Actual Exposure Time If Observed, Otherwise the Approved Exposure (s) """
|
|
obstype = models.CharField(max_length=3, blank=True, default='')
|
|
""" Type of Observation (GO,GTO,CAL,TOO,DDT) """
|
|
pi = models.CharField(max_length=40, blank=True, default='')
|
|
""" PI of Observation """
|
|
cycle = models.IntegerField(default=0)
|
|
""" AO Number (0=calibration phase) """
|
|
proposal = models.CharField(max_length=8, blank=True, default='')
|
|
""" Proposal Number """
|
|
public_date = models.IntegerField(default=0)
|
|
""" Public Date """
|
|
sequence_number = models.CharField(max_length=6, blank=True, default='000000')
|
|
""" Sequence Number """
|
|
data_mode = models.CharField(max_length=15, blank=True, default='')
|
|
""" Operational Mode of the Detector """
|
|
category = models.CharField(max_length=50, blank=True, default='')
|
|
""" Subject Category """
|
|
class_id = models.IntegerField(default=0)
|
|
""" Browse Object Classification """
|
|
object_class = models.ForeignKey(HeasarcObjectClass, on_delete=models.SET_NULL, null=True)
|
|
""" Related object in HeasarcObjectClass """
|
|
def get_absolute_url(self):
|
|
return "/heasarc/%i/chanmaster" % (self.pk)
|
|
|
|
"""
|
|
parameter_defaults = name ra dec significance b_flux_ap b_flux_ap_hi b_flux_ap_lo m_flux_ap m_flux_ap_hi m_flux_ap_lo
|
|
"""
|
|
class HeasarcCSC(HeasarcBase):
|
|
""" Chandra Source Catalog, v2.0
|
|
|
|
Sub-class of :class:`HeasarcBase`
|
|
"""
|
|
significance = models.FloatField(default=0.0)
|
|
""" Highest Source Signal-to-Noise Ratio Across All Stacked Obs. and Energy Bands """
|
|
b_flux_ap = models.FloatField(default=0.0)
|
|
""" Net Energy Flux from Source Region Aperture, Bayesian Analysis; ACIS Broad Band (0.5-7.0 keV) """
|
|
b_flux_ap_hi = models.FloatField(default=0.0)
|
|
""" Upper limit """
|
|
b_flux_ap_lo = models.FloatField(default=0.0)
|
|
""" Lower limit """
|
|
m_flux_ap = models.FloatField(default=0.0)
|
|
""" Net Energy Flux from Source Region Aperture, Bayesian Analysis; ACIS Medium (1.2-2.0 keV) """
|
|
m_flux_ap_hi = models.FloatField(default=0.0)
|
|
""" Upper limit """
|
|
m_flux_ap_lo = models.FloatField(default=0.0)
|
|
""" Lower limit """
|
|
conf_flag = models.CharField(max_length=1, blank=True, default='')
|
|
""" Flag Indicates Source Regions Overlap (Confused Source)
|
|
|
|
This is set to 'T' if the source is extended or the deconvolved
|
|
source extent is inconsistent with a point source at the 90%
|
|
confidence level in one or more observations and energy bands.
|
|
"""
|
|
extent_flag = models.CharField(max_length=1, blank=True, default='')
|
|
""" Flag Indicates Source Extent Inconsistent with Point Source (90% Confidence) """
|
|
error_ellipse_r0 = models.FloatField(default=0.0)
|
|
""" Major Radius of the 95% Confidence Level Position Error Ellipse """
|
|
error_ellipse_r1 = models.FloatField(default=0.0)
|
|
""" Minor Radius of the 95% Confidence Level Position Error Ellipse """
|
|
error_ellipse_angle = models.FloatField(default=0.0)
|
|
""" Position Angle of the Major Axis of the 95% Confidence Level Error Ellipse """
|
|
|
|
m_photflux_ap = models.FloatField(default=0.0)
|
|
""" Net Photon Flux from Source Region Aperture, Bayesian Analysis; ACIS Medium Band """
|
|
m_photflux_ap_hi = models.FloatField(default=0.0)
|
|
m_photflux_ap_lo = models.FloatField(default=0.0)
|
|
|
|
s_photflux_ap = models.FloatField(default=0.0)
|
|
""" Net Photon Flux from Source Region Aperture, Bayesian Analysis; ACIS Soft Band """
|
|
s_photflux_ap_hi = models.FloatField(default=0.0)
|
|
s_photflux_ap_lo = models.FloatField(default=0.0)
|
|
|
|
""" additional: """
|
|
s_flux_ap = models.FloatField(default=0.0)
|
|
s_flux_ap_hi = models.FloatField(default=0.0)
|
|
|
|
|
|
def get_absolute_url(self):
|
|
return "/heasarc/%i/csc" % (self.pk)
|
|
"""
|
|
parameter_defaults = name ra dec count_rate count_rate_error exposure source_extent source_extent_prob source_quality_flag hardness_ratio_1 hardness_ratio_2
|
|
"""
|
|
class HeasarcRASS2RXS(HeasarcBase):
|
|
""" Second ROSAT Source Catalog. Sub-class of :class:`HeasarcBase` """
|
|
count_rate = models.FloatField(default=0.0)
|
|
""" Source Count Rate """
|
|
count_rate_error = models.FloatField(default=0.0)
|
|
""" Error in Source Count Rate """
|
|
exposure = models.FloatField(default=0.0)
|
|
""" Source Exposure Time """
|
|
source_extent = models.FloatField(default=0.0)
|
|
""" Source Extent """
|
|
source_extent_prob = models.FloatField(default=0.0)
|
|
""" Probability of the Source Extent """
|
|
source_quality_flag = models.IntegerField(default=0)
|
|
""" Source Quality Flag (0=Good) """
|
|
hardness_ratio_1 = models.FloatField(default=0.0)
|
|
""" Hardness Ratio 1 """
|
|
hardness_ratio_2= models.FloatField(default=0.0)
|
|
""" Hardness Ratio 2 """
|
|
|
|
plaw_flux = models.FloatField(default=0.0)
|
|
""" Power-law flux """
|
|
plaw_chi2_reduced = models.FloatField(default=0.0)
|
|
""" Power-law chi2 statistics """
|
|
plaw_nh = models.FloatField(default=0.0)
|
|
""" Absorption column density for power-law fit """
|
|
detection_likelihood = models.FloatField(default=0.0)
|
|
""" Detection Likelihood """
|
|
|
|
mekal_flux = models.FloatField(default=0.0)
|
|
""" Mekal flux """
|
|
mekal_chi2_reduced = models.FloatField(default=0.0)
|
|
""" Chi2 statistics """
|
|
mekal_nh = models.FloatField(default=0.0)
|
|
""" Absorption column density """
|
|
bb_flux = models.FloatField(default=0.0)
|
|
""" Black-body flux """
|
|
bb_chi2_reduced = models.FloatField(default=0.0)
|
|
""" Chi2 statistics """
|
|
bb_nh = models.FloatField(default=0.0)
|
|
""" Absorption column density """
|
|
x_pixel_error = models.FloatField(default=0.0)
|
|
""" 1-Sigma Error in X Image Coordinate """
|
|
y_pixel_error = models.FloatField(default=0.0)
|
|
""" 1-Sigma Error in Y Image Coordinate """
|
|
time = models.FloatField(default=0.0)
|
|
""" Start Time of Exposure When Source Is within FOV and Detector on """
|
|
|
|
def get_absolute_url(self):
|
|
return "/heasarc/%i/rass2rxs" % (self.pk)
|
|
|
|
class HeasarcMAXIGSCHGL(HeasarcBase):
|
|
hardness_ratio = models.FloatField(default=0.0)
|
|
hardness_ratio_error = models.FloatField(default=0.0)
|
|
hb_flux = models.FloatField(default=0.0)
|
|
hb_flux_error = models.FloatField(default=0.0)
|
|
hb_significance = models.FloatField(default=0.0)
|
|
ctrpart_name = models.CharField(max_length=28, blank=True, default='')
|
|
class_id = models.IntegerField(default=0)
|
|
object_class = models.ForeignKey(HeasarcObjectClass, on_delete=models.SET_NULL, null=True)
|
|
redshift = models.FloatField(default=0.0)
|
|
def get_absolute_url(self):
|
|
return "/heasarc/%i/maxi_gsc" % (self.pk)
|
|
|
|
class Heasarc3MAXI(HeasarcBase):
|
|
"""
|
|
http://cdsarc.u-strasbg.fr/viz-bin/Cat?J/ApJS/238/32
|
|
|
|
['Seq', '3MAXI', 'RAdeg', 'DEdeg', 'ePos', 's4-10keV', 'F4-10keV', 'e_F4-10keV', 's3-4keV', 'F3-4keV', 'l_F3-4keV', 'e_F3-4keV', 's10-20keV', 'F10-20keV', 'l_F10-20keV', 'e_F10-20keV', 'F3-10keV', 'e_F3-10keV', 'HR1', 'e_HR1', 'HR2', 'e_HR2', 'HR3', 'e_HR3', 'TSVar', 'XVA', 'e_XVA']
|
|
"""
|
|
sign = models.FloatField(default=0.0)
|
|
""" s4-10keV """
|
|
flux = models.FloatField(default=0.0)
|
|
""" F4-10keV """
|
|
def get_absolute_url(self):
|
|
return "/heasarc/%i/3maxi" % (self.pk)
|
|
|
|
class HeasarcMAXI7YR(HeasarcBase):
|
|
"""
|
|
The combined catalog, see: https://heasarc.gsfc.nasa.gov/W3Browse/maxi/maxigsc7yr.html
|
|
"""
|
|
sign = models.FloatField(default=0.0)
|
|
""" s4-10keV """
|
|
flux = models.FloatField(default=0.0)
|
|
""" F4-10keV """
|
|
def get_absolute_url(self):
|
|
return "/heasarc/%i/maxi7yr" % (self.pk)
|
|
|
|
class Heasarc4FGL(HeasarcBase):
|
|
"""
|
|
Fermi LAT 10-Year Point Source Catalog (4FGL-DR2)
|
|
https://heasarc.gsfc.nasa.gov/W3Browse/fermi/fermilpsc.html
|
|
"""
|
|
sign = models.FloatField(default=0.0)
|
|
""" s4-10keV """
|
|
flux = models.FloatField(default=0.0)
|
|
""" F4-10keV """
|
|
def get_absolute_url(self):
|
|
return "/heasarc/%i/maxi7yr" % (self.pk)
|
|
|
|
|
|
class HeasarcXTEASSCAT(HeasarcBase):
|
|
rate1 = models.FloatField(default=0.0)
|
|
""" The source count rate in the 3 - 8 keV energy band, in counts/s/PCU (Proportional Counter Unit). """
|
|
rate1_error = models.FloatField(default=0.0)
|
|
""" The 1-sigma statistical uncertainty in the source count rate in the 3 - 8 keV energy band, in counts/s/PCU. """
|
|
|
|
rate2 = models.FloatField(default=0.0)
|
|
""" The source count rate in the 8 - 20 keV energy band, in counts/s/PCU (Proportional Counter Unit). """
|
|
rate2_error = models.FloatField(default=0.0)
|
|
""" The 1-sigma statistical uncertainty in the source count rate in the 8 - 20 keV energy band, in counts/s/PCU. """
|
|
|
|
alt_names= models.CharField(max_length=43, blank=True, default='')
|
|
""" A common name of the astrophysical object with which the XSS source is identified. There may be several entries per XSS source. The identification procedure is described in Section 3.1 of the published paper. """
|
|
broad_type = models.CharField(max_length=5, blank=True, default='')
|
|
detailed_type = models.CharField(max_length=6, blank=True, default='')
|
|
redshift = models.FloatField(default=0.0)
|
|
class_id = models.IntegerField(default=0)
|
|
""" Browse Object Classification """
|
|
""" The redshift of the object (if known) for extragalactic sources. """
|
|
def get_absolute_url(self):
|
|
return "/heasarc/%i/xteasscat" % (self.pk)
|
|
|
|
class HeasarcALLWISEAGN(HeasarcBase):
|
|
w1w2_color = models.FloatField(default=0.0)
|
|
""" AllWISE W1-W2 Color """
|
|
w2w3_color = models.FloatField(default=0.0)
|
|
""" AllWISE W2-W3 Color """
|
|
w1_mag = models.FloatField(default=0.0)
|
|
""" AllWISE W1 Magnitude """
|
|
gmag = models.FloatField(default=0.0)
|
|
""" Compiled g-Band Magnitude (SDSS Bandpass) """
|
|
redshift = models.FloatField(default=0.0)
|
|
""" Compiled Redshift """
|
|
redshift_flag = models.CharField(max_length=1, blank=True, default='')
|
|
""" Flag [sp] Indicates Type of Redshift: s=Spectroscopic; p=Photometric """
|
|
lqac2_name = models.CharField(max_length=17, blank=True, default='')
|
|
""" LQAC2 Source Identifier """
|
|
dr12q_name = models.CharField(max_length=24, blank=True, default='')
|
|
""" DR12Q Source Identifier """
|
|
milliquas_name= models.CharField(max_length=25, blank=True, default='')
|
|
""" MILLIQUAS Source Identifier """
|
|
def get_absolute_url(self):
|
|
return "/heasarc/%i/allwiseagn" % (self.pk)
|
|
|
|
class Heasarc2SXPS(HeasarcBase):
|
|
""" Swift-XRT Catalog """
|
|
Exposure = models.FloatField(default=0.0)
|
|
LastObsDate = models.DateTimeField(blank=True,null=True)
|
|
FirstObsDate = models.DateTimeField(blank=True,null=True)
|
|
FirstDetDate = models.DateTimeField(blank=True,null=True)
|
|
LastDetDate = models.DateTimeField(blank=True,null=True)
|
|
BestDetectionID = models.IntegerField(default=0)
|
|
DetFlag = models.IntegerField(default=0)
|
|
Rate_band0 = models.FloatField(default=0.0)
|
|
Rate_band0_pos = models.FloatField(default=0.0)
|
|
Rate_band0_neg = models.FloatField(default=0.0)
|
|
Rate_band1 = models.FloatField(default=0.0)
|
|
Rate_band1_pos = models.FloatField(default=0.0)
|
|
Rate_band1_neg = models.FloatField(default=0.0)
|
|
Rate_band2 = models.FloatField(default=0.0)
|
|
Rate_band2_pos = models.FloatField(default=0.0)
|
|
Rate_band2_neg = models.FloatField(default=0.0)
|
|
Rate_band3 = models.FloatField(default=0.0)
|
|
Rate_band3_pos = models.FloatField(default=0.0)
|
|
Rate_band3_neg = models.FloatField(default=0.0)
|
|
PeakRate_band0_pos = models.FloatField(default=0.0)
|
|
PeakRate_band0_neg = models.FloatField(default=0.0)
|
|
PeakRate_band1 = models.FloatField(default=0.0)
|
|
PeakRate_band1_pos = models.FloatField(default=0.0)
|
|
PeakRate_band1_neg = models.FloatField(default=0.0)
|
|
PeakRate_band2 = models.FloatField(default=0.0)
|
|
PeakRate_band2_pos = models.FloatField(default=0.0)
|
|
PeakRate_band2_neg = models.FloatField(default=0.0)
|
|
PeakRate_band3 = models.FloatField(default=0.0)
|
|
PeakRate_band3_pos = models.FloatField(default=0.0)
|
|
PeakRate_band3_neg = models.FloatField(default=0.0)
|
|
PowFlux = models.FloatField(default=0.0)
|
|
PowFlux_pos= models.FloatField(default=0.0)
|
|
PowFlux_neg= models.FloatField(default=0.0)
|
|
APECFlux= models.FloatField(default=0.0)
|
|
APECFlux_pos= models.FloatField(default=0.0)
|
|
APECFlux_neg= models.FloatField(default=0.0)
|
|
PowPeakFlux=models.FloatField(default=0.0)
|
|
PowPeakFlux_pos=models.FloatField(default=0.0)
|
|
PowPeakFlux_neg=models.FloatField(default=0.0)
|
|
FittedPowNH=models.FloatField(default=0.0)
|
|
FittedPowRedChi=models.FloatField(default=0.0)
|
|
FittedAPECNH=models.FloatField(default=0.0)
|
|
FittedAPECRedChi =models.FloatField(default=0.0)
|
|
|
|
def get_absolute_url(self):
|
|
return "/heasarc/%i/2sxps" % (self.pk)
|
|
|
|
class Heasarc4XMMDR9(HeasarcBase):
|
|
""" 4XMM DR9 Catalog (Currently 550124 in total) """
|
|
#gaia = models.ManyToManyField(GAIADR2)
|
|
SRCID = models.BigIntegerField(default=0)
|
|
#POSERR = models.FloatField(default=0.0)
|
|
radec_error = models.FloatField(default=0.0)
|
|
""" Positional arcsec """
|
|
DET_ML = models.FloatField(default=0.0)
|
|
EP_1_FLUX = models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
EP_1_FLUX_ERR = models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
EP_2_FLUX= models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
EP_2_FLUX_ERR=models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
EP_3_FLUX = models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
EP_3_FLUX_ERR = models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
EP_4_FLUX = models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
EP_4_FLUX_ERR = models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
EP_5_FLUX = models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
EP_5_FLUX_ERR = models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
EP_8_FLUX = models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
EP_8_FLUX_ERR = models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
EP_9_FLUX = models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
EP_9_FLUX_ERR = models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
HR1 = models.FloatField(default=0.0)
|
|
HR1_ERR = models.FloatField(default=0.0)
|
|
HR2 = models.FloatField(default=0.0)
|
|
HR2_ERR = models.FloatField(default=0.0)
|
|
HR3 = models.FloatField(default=0.0)
|
|
HR3_ERR = models.FloatField(default=0.0)
|
|
HR4 = models.FloatField(default=0.0)
|
|
HR4_ERR = models.FloatField(default=0.0)
|
|
EXTENT = models.FloatField(default=0.0)
|
|
""" arcsec """
|
|
EXT_ERR = models.FloatField(default=0.0)
|
|
""" arcsec """
|
|
EXT_ML = models.FloatField(default=0.0)
|
|
CHI2PROB = models.FloatField(default=0.0)
|
|
FVAR = models.FloatField(default=0.0)
|
|
FVARERR = models.FloatField(default=0.0)
|
|
VAR_FLAG = models.IntegerField(default=0)
|
|
SUM_FLAG = models.IntegerField(default=0)
|
|
EP_8_FMIN = models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
EP_8_FMIN_ERR = models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
EP_8_FMAX = models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
EP_8_FMAX_ERR = models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
MJD_FIRST = models.IntegerField(default=0)
|
|
MJD_LAST = models.IntegerField(default=0)
|
|
N_DETECTIONS = models.IntegerField(default=0)
|
|
CONFUSED = models.CharField(max_length=1,blank=True, default='')
|
|
WEBPAGE_URL = models.CharField(max_length=100,blank=True, default='')
|
|
|
|
def get_absolute_url(self):
|
|
return "/heasarc/%i/4xmm" % (self.pk)
|
|
|
|
class Heasarc4XMMDR10(HeasarcBase):
|
|
""" 4XMM DR10 Catalog (Currently XXX in total) """
|
|
"""
|
|
gaia = models.ManyToManyField(GAIADR3)
|
|
see scripts/match_gaia_xmm.py for experiments
|
|
"""
|
|
SRCID = models.BigIntegerField(default=0)
|
|
#POSERR = models.FloatField(default=0.0)
|
|
radec_error = models.FloatField(default=0.0)
|
|
""" Positional arcsec """
|
|
DET_ML = models.FloatField(default=0.0)
|
|
EP_1_FLUX = models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
EP_1_FLUX_ERR = models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
EP_2_FLUX= models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
EP_2_FLUX_ERR=models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
EP_3_FLUX = models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
EP_3_FLUX_ERR = models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
EP_4_FLUX = models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
EP_4_FLUX_ERR = models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
EP_5_FLUX = models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
EP_5_FLUX_ERR = models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
EP_8_FLUX = models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
EP_8_FLUX_ERR = models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
EP_9_FLUX = models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
EP_9_FLUX_ERR = models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
HR1 = models.FloatField(default=0.0)
|
|
HR1_ERR = models.FloatField(default=0.0)
|
|
HR2 = models.FloatField(default=0.0)
|
|
HR2_ERR = models.FloatField(default=0.0)
|
|
HR3 = models.FloatField(default=0.0)
|
|
HR3_ERR = models.FloatField(default=0.0)
|
|
HR4 = models.FloatField(default=0.0)
|
|
HR4_ERR = models.FloatField(default=0.0)
|
|
EXTENT = models.FloatField(default=0.0)
|
|
""" arcsec """
|
|
EXT_ERR = models.FloatField(default=0.0)
|
|
""" arcsec """
|
|
EXT_ML = models.FloatField(default=0.0)
|
|
CHI2PROB = models.FloatField(default=0.0)
|
|
FVAR = models.FloatField(default=0.0)
|
|
FVARERR = models.FloatField(default=0.0)
|
|
VAR_FLAG = models.IntegerField(default=0)
|
|
SUM_FLAG = models.IntegerField(default=0)
|
|
EP_8_FMIN = models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
EP_8_FMIN_ERR = models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
EP_8_FMAX = models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
EP_8_FMAX_ERR = models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
MJD_FIRST = models.IntegerField(default=0)
|
|
MJD_LAST = models.IntegerField(default=0)
|
|
N_DETECTIONS = models.IntegerField(default=0)
|
|
CONFUSED = models.CharField(max_length=1,blank=True, default='')
|
|
WEBPAGE_URL = models.CharField(max_length=100,blank=True, default='')
|
|
|
|
def get_absolute_url(self):
|
|
return "/heasarc/%i/4xmmdr10" % (self.pk)
|
|
|
|
class Heasarc4XMMDR12(HeasarcBase):
|
|
""" 4XMM DR12 Catalog """
|
|
"""
|
|
gaia = models.ManyToManyField(GAIADR3)
|
|
see scripts/match_gaia_xmm.py for experiments
|
|
"""
|
|
SRCID = models.BigIntegerField(default=0)
|
|
#POSERR = models.FloatField(default=0.0)
|
|
radec_error = models.FloatField(default=0.0)
|
|
""" Positional arcsec """
|
|
DET_ML = models.FloatField(default=0.0)
|
|
EP_1_FLUX = models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
EP_1_FLUX_ERR = models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
EP_2_FLUX= models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
EP_2_FLUX_ERR=models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
EP_3_FLUX = models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
EP_3_FLUX_ERR = models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
EP_4_FLUX = models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
EP_4_FLUX_ERR = models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
EP_5_FLUX = models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
EP_5_FLUX_ERR = models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
EP_8_FLUX = models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
EP_8_FLUX_ERR = models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
EP_9_FLUX = models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
EP_9_FLUX_ERR = models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
HR1 = models.FloatField(default=0.0)
|
|
HR1_ERR = models.FloatField(default=0.0)
|
|
HR2 = models.FloatField(default=0.0)
|
|
HR2_ERR = models.FloatField(default=0.0)
|
|
HR3 = models.FloatField(default=0.0)
|
|
HR3_ERR = models.FloatField(default=0.0)
|
|
HR4 = models.FloatField(default=0.0)
|
|
HR4_ERR = models.FloatField(default=0.0)
|
|
EXTENT = models.FloatField(default=0.0)
|
|
""" arcsec """
|
|
EXT_ERR = models.FloatField(default=0.0)
|
|
""" arcsec """
|
|
EXT_ML = models.FloatField(default=0.0)
|
|
CHI2PROB = models.FloatField(default=0.0)
|
|
FVAR = models.FloatField(default=0.0)
|
|
FVARERR = models.FloatField(default=0.0)
|
|
VAR_FLAG = models.IntegerField(default=0)
|
|
SUM_FLAG = models.IntegerField(default=0)
|
|
EP_8_FMIN = models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
EP_8_FMIN_ERR = models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
EP_8_FMAX = models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
EP_8_FMAX_ERR = models.FloatField(default=0.0)
|
|
""" [erg/cm**2/s] """
|
|
MJD_FIRST = models.IntegerField(default=0)
|
|
MJD_LAST = models.IntegerField(default=0)
|
|
N_DETECTIONS = models.IntegerField(default=0)
|
|
CONFUSED = models.CharField(max_length=1,blank=True, default='')
|
|
WEBPAGE_URL = models.CharField(max_length=100,blank=True, default='')
|
|
|
|
def get_absolute_url(self):
|
|
return "/heasarc/%i/4xmmdr12" % (self.pk)
|
|
|
|
class RosatExpMap(models.Model):
|
|
""" ROSAT exposure map """
|
|
healpix = models.BigIntegerField(db_index=True, default=0)
|
|
""" HEALPIX source index """
|
|
exposure = models.FloatField(default=0.0)
|
|
""" Exposure (s) """
|
|
detlimflux = models.FloatField(default=0.0)
|
|
""" nH """
|
|
nH = models.FloatField(default=0.0)
|
|
|
|
class GreenSNR(models.Model):
|
|
""" ROSAT exposure map """
|
|
healpix_plate = models.IntegerField(db_index=True, default=0)
|
|
ra = models.FloatField(default=0.0)
|
|
""" Right Ascension of the Source """
|
|
dec = models.FloatField(default=0.0)
|
|
""" Declination of the Source """
|
|
lii = models.FloatField(default=0.0)
|
|
""" Galactic Longitude """
|
|
bii = models.FloatField(default=0.0)
|
|
""" Galactic Latitude """
|
|
MajDiam = models.FloatField(default=0.0)
|
|
MinDiam = models.FloatField(default=0.0)
|
|
name = models.CharField(max_length=11,blank=True, default='')
|
|
snrtype = models.CharField(max_length=2,blank=True, default='')
|
|
SpIndex = models.FloatField(default=0.0)
|
|
uSpIndex = models.CharField(max_length=2,blank=True, default='')
|
|
Names = models.CharField(max_length=26,blank=True, default='')
|
|
|
|
class HeasarcUserCat(HeasarcBase):
|
|
""" User custom catalog """
|
|
bibcode = models.CharField(max_length=36,blank=True, default='')
|
|
""" Bibcode of the catalog (if available) """
|
|
notes = models.TextField("notes",max_length=2000, null=True, blank=True)
|
|
autoname = models.BooleanField(default=False, null=False, help_text="Generate IAU name of the component in the form <b>NAME JHHMMSS.s+DDMMSS</b>, <br>where NAME is taken from the corresponding field above.")
|
|
def get_update_url(self):
|
|
return "/heasarc/%i/update" % (self.pk)
|
|
def get_delete_url(self):
|
|
return "/heasarc/%i/delete" % (self.pk)
|
|
def get_nasa_url(self):
|
|
if(self.bibcode):
|
|
return "https://ui.adsabs.harvard.edu/abs/{}/abstract".format(self.bibcode)
|
|
else:
|
|
return None
|
|
|
|
class HeasarcUserCatForm(forms.ModelForm):
|
|
class Meta:
|
|
model = HeasarcUserCat
|
|
fields = ('name','autoname','ra', 'dec', 'error_radius','bibcode','notes')
|
|
#widgets = {
|
|
# 'bibcode': forms.TextInput(attrs={'style': 'width: 620px;'}),
|
|
#}
|