本文整理汇总了Python中astrocats.catalog.utils.is_number函数的典型用法代码示例。如果您正苦于以下问题:Python is_number函数的具体用法?Python is_number怎么用?Python is_number使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了is_number函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Python代码示例。
示例1: add_source
def add_source(self, **kwargs):
# Sanitize some fields before adding source
# Replace reference names and URLs using dictionaries.
if (kwargs.get(SOURCE.BIBCODE, []) and
len(kwargs[SOURCE.BIBCODE]) != 19):
raise ValueError(
"Bibcode '{}' must be exactly 19 characters "
"long".format(kwargs[SOURCE.BIBCODE]))
# if SOURCE.NAME not in kwargs:
# kwargs[SOURCE.NAME] = kwargs[SOURCE.BIBCODE]
if SOURCE.NAME in kwargs:
if (kwargs[SOURCE.NAME].upper().startswith('ATEL') and
SOURCE.BIBCODE not in kwargs):
kwargs[SOURCE.NAME] = (kwargs[SOURCE.NAME]
.replace('ATEL', 'ATel')
.replace('Atel', 'ATel')
.replace('ATel #', 'ATel ')
.replace('ATel#', 'ATel')
.replace('ATel', 'ATel '))
kwargs[SOURCE.NAME] = ' '.join(kwargs[SOURCE.NAME].split())
atelnum = kwargs[SOURCE.NAME].split()[-1]
if is_number(atelnum) and atelnum in self.catalog.atels_dict:
kwargs[SOURCE.BIBCODE] = self.catalog.atels_dict[atelnum]
if (kwargs[SOURCE.NAME].upper().startswith('CBET') and
SOURCE.BIBCODE not in kwargs):
kwargs[SOURCE.NAME] = kwargs[SOURCE.NAME].replace('CBET',
'CBET ')
kwargs[SOURCE.NAME] = ' '.join(kwargs[SOURCE.NAME].split())
cbetnum = kwargs[SOURCE.NAME].split()[-1]
if is_number(cbetnum) and cbetnum in self.catalog.cbets_dict:
kwargs[SOURCE.BIBCODE] = self.catalog.cbets_dict[cbetnum]
if (kwargs[SOURCE.NAME].upper().startswith('IAUC') and
SOURCE.BIBCODE not in kwargs):
kwargs[SOURCE.NAME] = kwargs[SOURCE.NAME].replace('IAUC',
'IAUC ')
kwargs[SOURCE.NAME] = ' '.join(kwargs[SOURCE.NAME].split())
iaucnum = kwargs[SOURCE.NAME].split()[-1]
if is_number(iaucnum) and iaucnum in self.catalog.iaucs_dict:
kwargs[SOURCE.BIBCODE] = self.catalog.iaucs_dict[iaucnum]
for rep in self.catalog.source_syns:
if kwargs[SOURCE.NAME] in self.catalog.source_syns[rep]:
kwargs[SOURCE.NAME] = rep
break
if SOURCE.URL in kwargs:
for rep in self.catalog.url_redirs:
if kwargs[SOURCE.URL] in self.catalog.url_redirs[rep]:
kwargs[SOURCE.URL] = rep
break
return super().add_source(**kwargs)
开发者ID:astrocatalogs,项目名称:novae,代码行数:56,代码来源:nova.py
示例2: _clean_quantity
def _clean_quantity(self, quantity):
"""Clean quantity value before it is added to entry.
"""
value = quantity.get(QUANTITY.VALUE, '').strip()
error = quantity.get(QUANTITY.E_VALUE, '').strip()
unit = quantity.get(QUANTITY.U_VALUE, '').strip()
kind = quantity.get(QUANTITY.KIND, '').strip()
if not value:
return False
if is_number(value):
value = '%g' % Decimal(value)
if error:
error = '%g' % Decimal(error)
if value:
quantity[QUANTITY.VALUE] = value
if error:
quantity[QUANTITY.E_VALUE] = error
if unit:
quantity[QUANTITY.U_VALUE] = unit
if kind:
quantity[QUANTITY.KIND] = kind
return True
开发者ID:astrocatalogs,项目名称:astrocats,代码行数:26,代码来源:entry.py
示例3: check
def check(self, val):
"""Make sure given value is consistent with this `Key` specification.
NOTE: if `type` is 'None', then `listable` also is *not* checked.
"""
# If there is no `type` requirement, everything is allowed
if self.type is None:
return True
is_list = isinstance(val, list)
# If lists are not allowed, and this is a list --> false
if not self.listable and is_list:
return False
# `is_number` already checks for either list or single value
if self.type == KEY_TYPES.NUMERIC and not is_number(val):
return False
elif self.type == KEY_TYPES.STRING:
# If its a list, check first element
if is_list:
if not isinstance(val[0], str):
return False
# Otherwise, check it
elif not isinstance(val, str):
return False
elif self.type == KEY_TYPES.BOOL:
if is_list and not isinstance(val[0], bool):
return False
elif not isinstance(val, bool):
return False
return True
开发者ID:astrocatalogs,项目名称:astrocats,代码行数:32,代码来源:key.py
示例4: extra_aliases
def extra_aliases(self):
"""These aliases are considered when merging duplicates only, but are
not added to the list of aliases that would be included with the event
"""
if (self[SUPERNOVA.NAME].startswith('SN') and
is_number(self[SUPERNOVA.NAME][2:6])):
return ['AT' + self[SUPERNOVA.NAME][2:]]
return []
开发者ID:astrocatalogs,项目名称:supernovae,代码行数:8,代码来源:supernova.py
示例5: get_rep_folder
def get_rep_folder(entry, repofolders):
if 'discoverdate' not in entry:
return repofolders[0]
if not is_number(entry['discoverdate'][0]['value'].split('/')[0]):
warnings.warn('Discovery year is not a number')
return repofolders[0]
repoyears = get_rep_years(repofolders)
for r, repoyear in enumerate(repoyears):
if int(entry['discoverdate'][0]['value'].split('/')[0]) <= repoyear:
return repofolders[r]
return repofolders[0]
开发者ID:astrocatalogs,项目名称:astrocats,代码行数:11,代码来源:repos.py
示例6: do_hst
def do_hst(catalog):
task_str = catalog.get_current_task_str()
url = 'http://archive.stsci.edu/hst/search.php'
reference = 'Hubble Pointings'
jtxt = catalog.load_url(
url,
os.path.join(catalog.get_current_task_repo(), 'HST.json'),
post={
'sci_target_descrip': '*supernova*',
'outputformat': 'JSON_file',
'action': 'Search',
'max_records': '50000',
'max_rpp': '50000'
},
verify=False)
rows = json.loads(jtxt)
allowed_prefixes = ('PS1', 'DES', 'GAIA', 'ASASSN', 'AT', 'IPTF', 'LSQ',
'PTF')
loopcnt = 0
for row in pbar(rows, task_str):
oldname = name_clean(row['Target Name'])
if not oldname.upper().startswith(allowed_prefixes):
continue
if oldname.startswith('PS1-') and not is_number(oldname[4]):
continue
name, source = catalog.new_entry(oldname, srcname=reference, url=url)
if (ENTRY.RA in catalog.entries[name] and
ENTRY.DEC in catalog.entries[name]):
continue
catalog.entries[name].add_quantity(
ENTRY.RA, row['RA (J2000)'], source=source)
catalog.entries[name].add_quantity(
ENTRY.DEC, row['Dec (J2000)'], source=source)
catalog.journal_entries()
loopcnt = loopcnt + 1
if (catalog.args.travis and loopcnt % catalog.TRAVIS_QUERY_LIMIT == 0):
break
catalog.journal_entries()
return
开发者ID:astrocatalogs,项目名称:supernovae,代码行数:43,代码来源:hst.py
示例7: __init__
def __init__(self, parent, **kwargs):
self._REQ_KEY_SETS = [
[QUANTITY.VALUE],
[QUANTITY.SOURCE]
]
super().__init__(parent, **kwargs)
# Aliases not added if in DISTINCT_FROM
if self._key == parent._KEYS.ALIAS:
value = parent.catalog.clean_entry_name(self[QUANTITY.VALUE])
for df in parent.get(parent._KEYS.DISTINCT_FROM, []):
if value == df[QUANTITY.VALUE]:
raise CatDictError(
"Alias '{}' in '{}'\' '{}' list".format(
value, parent[parent._KEYS.NAME],
parent._KEYS.DISTINCT_FROM))
# Check that value exists
if (not self[QUANTITY.VALUE] or self[QUANTITY.VALUE] == '--' or
self[QUANTITY.VALUE] == '-'):
raise CatDictError(
"Value '{}' is empty, not adding to '{}'".format(
self[QUANTITY.VALUE], parent[parent._KEYS.NAME]))
if not parent._clean_quantity(self):
raise CatDictError(
"Value '{}' did not survive cleaning process, not adding to "
" '{}'.".format(self[QUANTITY.VALUE],
parent[parent._KEYS.NAME]))
# Check that quantity value matches type after cleaning
if (isinstance(self._key, Key) and
self._key.type == KEY_TYPES.NUMERIC and not
is_number(self[QUANTITY.VALUE])):
raise CatDictError(
"Value '{}' is not numeric, not adding to '{}'".format(
self[QUANTITY.VALUE], parent[parent._KEYS.NAME]))
开发者ID:astrocatalogs,项目名称:astrocats,代码行数:38,代码来源:quantity.py
示例8: do_asiago_spectra
def do_asiago_spectra(catalog):
task_str = catalog.get_current_task_str()
html = catalog.load_cached_url(
('http://sngroup.oapd.inaf.it./'
'cgi-bin/output_class.cgi?sn=1990'),
os.path.join(catalog.get_current_task_repo(),
'Asiago/spectra.html'))
if not html:
return
bs = BeautifulSoup(html, 'html5lib')
trs = bs.findAll('tr')
for tr in pbar(trs, task_str):
tds = tr.findAll('td')
name = ''
host = ''
# fitsurl = ''
source = ''
reference = ''
for tdi, td in enumerate(tds):
if tdi == 0:
butt = td.find('button')
if not butt:
break
alias = butt.text.strip()
alias = alias.replace('PSNJ', 'PSN J').replace('GAIA', 'Gaia')
elif tdi == 1:
name = (td.text.strip()
.replace('PSNJ', 'PSN J')
.replace('GAIA', 'Gaia'))
if name.startswith('SN '):
name = 'SN' + name[3:]
if not name:
name = alias
if is_number(name[:4]):
name = 'SN' + name
oldname = name
name = catalog.add_entry(name)
reference = 'Asiago Supernova Catalogue'
refurl = 'http://graspa.oapd.inaf.it/cgi-bin/sncat.php'
secondarysource = catalog.entries[name].add_source(
name=reference, url=refurl, secondary=True)
catalog.entries[name].add_quantity(SUPERNOVA.ALIAS, oldname,
secondarysource)
if alias != name:
catalog.entries[name].add_quantity(SUPERNOVA.ALIAS, alias,
secondarysource)
elif tdi == 2:
host = td.text.strip()
if host == 'anonymous':
host = ''
elif tdi == 3:
discoverer = td.text.strip()
elif tdi == 5:
ra = td.text.strip()
elif tdi == 6:
dec = td.text.strip()
elif tdi == 7:
claimedtype = td.text.strip()
elif tdi == 8:
redshift = td.text.strip()
# elif tdi == 9:
# epochstr = td.text.strip()
# if epochstr:
# mjd = (astrotime(epochstr[:4] + '-' + epochstr[4:6] +
# '-' +
# str(floor(float(epochstr[6:]))).zfill(2)).mjd +
# float(epochstr[6:]) - floor(float(epochstr[6:])))
# else:
# mjd = ''
elif tdi == 10:
refs = td.findAll('a')
source = ''
reference = ''
refurl = ''
for ref in refs:
if ref.text != 'REF':
reference = ref.text
refurl = ref['href']
if reference:
source = catalog.entries[name].add_source(
name=reference, url=refurl)
catalog.entries[name].add_quantity(SUPERNOVA.ALIAS, name,
secondarysource)
sources = uniq_cdl(
list(filter(None, [source, secondarysource])))
elif tdi == 12:
pass
# fitslink = td.find('a')
# if fitslink:
# fitsurl = fitslink['href']
if name:
catalog.entries[name].add_quantity(SUPERNOVA.CLAIMED_TYPE,
claimedtype,
sources)
catalog.entries[name].add_quantity(SUPERNOVA.RA, ra, sources)
catalog.entries[name].add_quantity(SUPERNOVA.DEC, dec, sources)
catalog.entries[name].add_quantity(SUPERNOVA.REDSHIFT, redshift,
sources)
catalog.entries[name].add_quantity(SUPERNOVA.DISCOVERER,
#.........这里部分代码省略.........
开发者ID:astrocatalogs,项目名称:novae,代码行数:101,代码来源:asiago.py
示例9: merge_duplicates
def merge_duplicates(self):
"""Merge and remove duplicate entries.
Compares each entry ('name') in `stubs` to all later entries to check
for duplicates in name or alias. If a duplicate is found, they are
merged and written to file.
"""
if len(self.entries) == 0:
self.log.error("WARNING: `entries` is empty, loading stubs")
if self.args.update:
self.log.warning(
"No sources changed, entry files unchanged in update."
" Skipping merge.")
return
self.entries = self.load_stubs()
task_str = self.get_current_task_str()
keys = list(sorted(self.entries.keys()))
for n1, name1 in enumerate(pbar(keys, task_str)):
allnames1 = set(self.entries[name1].get_aliases())
if name1.startswith('SN') and is_number(name1[2:6]):
allnames1 = allnames1.union(['AT' + name1[2:]])
# Search all later names
for name2 in keys[n1 + 1:]:
if name1 == name2:
continue
allnames2 = set(self.entries[name2].get_aliases())
if name2.startswith('SN') and is_number(name2[2:6]):
allnames2.union(['AT' + name2[2:]])
# If there are any common names or aliases, merge
if len(allnames1 & allnames2):
self.log.warning(
"Found single entry with multiple entries "
"('{}' and '{}'), merging.".format(name1, name2))
load1 = self.proto.init_from_file(
self, name=name1)
load2 = self.proto.init_from_file(
self, name=name2)
if load1 is not None and load2 is not None:
# Delete old files
self._delete_entry_file(entry=load1)
self._delete_entry_file(entry=load2)
self.entries[name1] = load1
self.entries[name2] = load2
priority1 = 0
priority2 = 0
for an in allnames1:
if an.startswith(('SN', 'AT')):
priority1 += 1
for an in allnames2:
if an.startswith(('SN', 'AT')):
priority2 += 1
if priority1 > priority2:
self.copy_to_entry(name2, name1)
keys.append(name1)
del self.entries[name2]
else:
self.copy_to_entry(name1, name2)
keys.append(name2)
del self.entries[name1]
else:
self.log.warning('Duplicate already deleted')
# if len(self.entries) != 1:
# self.log.error(
# "WARNING: len(entries) = {}, expected 1. "
# "Still journaling...".format(len(self.entries)))
self.journal_entries()
if self.args.travis and n1 > self.TRAVIS_QUERY_LIMIT:
break
开发者ID:astrocatalogs,项目名称:tidaldisruptions,代码行数:77,代码来源:tidaldisruptioncatalog.py
示例10: do_crts
def do_crts(catalog):
"""Import data from the Catalina Real-Time Transient Survey."""
crtsnameerrors = ['2011ax']
task_str = catalog.get_current_task_str()
folders = ['catalina', 'MLS', 'MLS', 'SSS']
files = ['AllSN.html', 'AllSN.arch.html', 'CRTSII_SN.html', 'AllSN.html']
for fi, fold in enumerate(pbar(folders, task_str)):
html = catalog.load_url(
'http://nesssi.cacr.caltech.edu/' + fold + '/' + files[fi],
os.path.join(catalog.get_current_task_repo(), 'CRTS', fold + '-' +
files[fi]), archived_mode=('arch' in files[fi]))
html = html.replace('<ahref=', '<a href=')
if not html:
continue
bs = BeautifulSoup(html, 'html5lib')
trs = bs.findAll('tr')
for tri, tr in enumerate(pbar(trs, task_str)):
tds = tr.findAll('td')
if not tds:
continue
# refs = []
aliases = []
crtsname = ''
ra = ''
dec = ''
lclink = ''
# ttype = ''
# ctype = ''
for tdi, td in enumerate(tds):
if tdi == 0:
crtsname = td.contents[0].text.strip()
elif tdi == 1:
ra = td.contents[0]
elif tdi == 2:
dec = td.contents[0]
elif tdi == (8 if files[fi] == 'CRTSII_SN.html' else 11):
lclink = td.find('a')['onclick']
lclink = lclink.split("'")[1]
elif tdi == (10 if files[fi] == 'CRTSII_SN.html' else 13):
aliases = re.sub('[()]', '', re.sub(
'<[^<]+?>', '', td.contents[-1].strip()))
aliases = [xx.strip('; ') for xx in list(
filter(None, aliases.split(' ')))]
name = ''
hostmag = ''
hostupper = False
validaliases = []
for ai, alias in enumerate(aliases):
if alias in ['SN', 'SDSS']:
continue
if alias in crtsnameerrors:
continue
if alias == 'mag':
if ai < len(aliases) - 1:
ind = ai + 1
if aliases[ai + 1] in ['SDSS']:
ind = ai + 2
elif aliases[ai + 1] in ['gal', 'obj', 'object',
'source']:
ind = ai - 1
if '>' in aliases[ind]:
hostupper = True
hostmag = aliases[ind].strip('>~').replace(
',', '.').replace('m', '.')
continue
if (is_number(alias[:4]) and alias[:2] == '20' and
len(alias) > 4):
name = 'SN' + alias
if ((('asassn' in alias and len(alias) > 6) or
('ptf' in alias and len(alias) > 3) or
('ps1' in alias and len(alias) > 3) or
'snhunt' in alias or
('mls' in alias and len(alias) > 3) or
'gaia' in alias or
('lsq' in alias and len(alias) > 3))):
alias = alias.replace('SNHunt', 'SNhunt')
validaliases.append(alias)
if not name:
name = crtsname
name, source = catalog.new_entry(
name, srcname='Catalina Sky Survey',
bibcode='2009ApJ...696..870D',
url='http://nesssi.cacr.caltech.edu/catalina/AllSN.html')
catalog.entries[name].add_quantity(SUPERNOVA.ALIAS, name, source)
for alias in validaliases:
catalog.entries[name].add_quantity(
SUPERNOVA.ALIAS, alias, source)
catalog.entries[name].add_quantity(
SUPERNOVA.RA, ra.strip(), source, u_value='floatdegrees')
catalog.entries[name].add_quantity(
SUPERNOVA.DEC, dec.strip(), source, u_value='floatdegrees')
if SUPERNOVA.CLAIMED_TYPE not in catalog.entries[name]:
catalog.entries[name].add_quantity(
SUPERNOVA.CLAIMED_TYPE, 'Candidate', source)
if hostmag:
# 1.0 magnitude error based on Drake 2009 assertion that SN are
# only considered
#.........这里部分代码省略.........
开发者ID:astrocatalogs,项目名称:supernovae,代码行数:101,代码来源:crts.py
示例11: name_clean
def name_clean(name):
newname = name.strip(' ;,*')
if newname.startswith('NAME '):
newname = newname.replace('NAME ', '', 1)
if newname.endswith(' SN'):
newname = newname.replace(' SN', '')
if newname.endswith(':SN'):
newname = newname.replace(':SN', '')
if newname.startswith('MASJ'):
newname = newname.replace('MASJ', 'MASTER OT J', 1)
if newname.startswith('MASTER') and is_number(newname[7]):
newname = newname.replace('MASTER', 'MASTER OT J', 1)
if newname.startswith('MASTER OT J '):
newname = newname.replace('MASTER OT J ', 'MASTER OT J', 1)
if newname.startswith('OGLE '):
newname = newname.replace('OGLE ', 'OGLE-', 1)
if newname.startswith('OGLE-') and len(newname) != 16:
namesp = newname.split('-')
if (len(namesp[1]) == 4 and is_number(namesp[1]) and
is_number(namesp[3])):
newname = 'OGLE-' + namesp[1] + '-SN-' + namesp[3].zfill(3)
if newname.startswith('SN SDSS'):
newname = newname.replace('SN SDSS ', 'SDSS', 1)
if newname.startswith('SDSS '):
newname = newname.replace('SDSS ', 'SDSS', 1)
if newname.startswith('SDSS'):
namesp = newname.split('-')
if (len(namesp) == 3 and is_number(namesp[0][4:]) and
is_number(namesp[1]) and is_number(namesp[2])):
newname = namesp[0] + '-' + namesp[1] + '-' + namesp[2].zfill(3)
if newname.startswith('SDSS-II SN'):
namesp = newname.split()
if len(namesp) == 3 and is_number(namesp[2]):
newname = 'SDSS-II SN ' + namesp[2].lstrip('0')
if newname.startswith('SN CL'):
newname = newname.replace('SN CL', 'CL', 1)
if newname.startswith('SN HiTS '):
newname = newname.replace('SN HiTS ', 'SNHiTS', 1)
if newname.startswith('GAIA'):
newname = newname.replace('GAIA', 'Gaia', 1)
if newname.startswith('Gaia '):
newname = newname.replace('Gaia ', 'Gaia', 1)
if newname.startswith('Gaia'):
newname = 'Gaia' + newname[4:].lower()
if newname.startswith('GRB'):
newname = newname.replace('GRB', 'GRB ', 1)
if newname.startswith('GRB ') and is_number(newname[4:].strip()):
newname = 'GRB ' + newname[4:].strip() + 'A'
if newname.startswith('LSQ '):
newname = newname.replace('LSQ ', 'LSQ', 1)
if newname.startswith('KSN '):
newname = newname.replace('KSN ', 'KSN-', 1)
if newname.startswith('SNSDF '):
newname = newname.replace(' ', '')
if newname.startswith('SNSDF'):
namesp = newname.split('.')
if len(namesp[0]) == 9:
newname = namesp[0] + '-' + namesp[1].zfill(2)
if newname.startswith('HFF '):
newname = newname.replace(' ', '')
if newname.startswith('SN HST'):
newname = newname.replace('SN HST', 'HST', 1)
if newname.startswith('HST ') and newname[4] != 'J':
newname = newname.replace('HST ', 'HST J', 1)
if newname.startswith('SNLS') and newname[4] != '-':
newname = newname.replace('SNLS', 'SNLS-', 1)
if newname.startswith('SNLS- '):
newname = newname.replace('SNLS- ', 'SNLS-', 1)
if newname.startswith('CRTS CSS'):
newname = newname.replace('CRTS CSS', 'CSS', 1)
if newname.startswith('CRTS MLS'):
newname = newname.replace('CRTS MLS', 'MLS', 1)
if newname.startswith('CRTS SSS'):
newname = newname.replace('CRTS SSS', 'SSS', 1)
if newname.startswith(('CSS', 'MLS', 'SSS')):
newname = newname.replace(' ', ':').replace('J', '')
if newname.startswith('SN HFF'):
newname = newname.replace('SN HFF', 'HFF', 1)
if newname.startswith('SN GND'):
newname = newname.replace('SN GND', 'GND', 1)
if newname.startswith('SN SCP'):
newname = newname.replace('SN SCP', 'SCP', 1)
if newname.startswith('SN UDS'):
newname = newname.replace('SN UDS', 'UDS', 1)
if newname.startswith('SCP') and newname[3] != '-':
newname = newname.replace('SCP', 'SCP-', 1)
if newname.startswith('SCP- '):
newname = newname.replace('SCP- ', 'SCP-', 1)
if newname.startswith('PS 1'):
newname = newname.replace('PS 1', 'PS1', 1)
if newname.startswith('PS1 SN PS'):
newname = newname.replace('PS1 SN PS', 'PS', 1)
if newname.startswith('PS1 SN'):
newname = newname.replace('PS1 SN', 'PS1', 1)
if newname.startswith('PSN K'):
newname = newname.replace('PSN K', 'K', 1)
if newname.startswith('K') and is_number(newname[1:5]):
namesp = newname.split('-')
if len(namesp[0]) == 5:
newname = namesp[0] + '-' + namesp[1].zfill(3)
#.........这里部分代码省略.........
开发者ID:astrocatalogs,项目名称:tidaldisruptions,代码行数:101,代码来源:clean.py
示例12: radec_clean
def radec_clean(svalue, quantity, unit=''):
if unit == 'floatdegrees':
if not is_number(svalue):
return (svalue, unit)
deg = float('%g' % Decimal(svalue))
sig = get_sig_digits(svalue)
if 'ra' in quantity:
flhours = deg / 360.0 * 24.0
hours = floor(flhours)
minutes = floor((flhours - hours) * 60.0)
seconds = (flhours * 60.0 - (hours * 60.0 + minutes)) * 60.0
hours = 0 if hours < 1.e-6 else hours
minutes = 0 if minutes < 1.e-6 else minutes
seconds = 0.0 if seconds < 1.e-6 else seconds
if seconds > 60.0:
raise(ValueError('Invalid seconds value for ' + quantity))
svalue = str(hours).zfill(2) + ':' + str(minutes).zfill(2) + \
':' + zpad(pretty_num(seconds, sig=sig - 1))
elif 'dec' in quantity:
fldeg = abs(deg)
degree = floor(fldeg)
minutes = floor((fldeg - degree) * 60.0)
seconds = (fldeg * 60.0 - (degree * 60.0 + minutes)) * 60.0
if seconds > 60.0:
raise(ValueError('Invalid seconds value for ' + quantity))
svalue = (('+' if deg >= 0.0 else '-') +
str(degree).strip('+-').zfill(2) + ':' +
str(minutes).zfill(2) + ':' +
zpad(pretty_num(seconds, sig=sig - 1)))
elif unit == 'nospace' and 'ra' in quantity:
svalue = svalue[:2] + ':' + svalue[2:4] + \
((':' + zpad(svalue[4:])) if len(svalue) > 4 else '')
elif unit == 'nospace' and 'dec' in quantity:
if svalue.startswith(('+', '-')):
svalue = svalue[:3] + ':' + svalue[3:5] + \
((':' + zpad(svalue[5:])) if len(svalue) > 5 else '')
else:
svalue = '+' + svalue[:2] + ':' + svalue[2:4] + \
((':' + zpad(svalue[4:])) if len(svalue) > 4 else '')
else:
svalue = svalue.replace(' ', ':')
if 'dec' in quantity:
valuesplit = svalue.split(':')
svalue = (('-' if valuesplit[0].startswith('-') else '+') +
valuesplit[0].strip('+-').zfill(2) +
(':' + valuesplit[1].zfill(2) if
len(valuesplit) > 1 else '') +
(':' + zpad(valuesplit[2]) if
len(valuesplit) > 2 else ''))
if 'ra' in quantity:
sunit = 'hours'
elif 'dec' in quantity:
sunit = 'degrees'
# Correct case of arcseconds = 60.0.
valuesplit = svalue.split(':')
if len(valuesplit) == 3 and valuesplit[-1] in ["60.0", "60.", "60"]:
svalue = valuesplit[0] + ':' + str(Decimal(valuesplit[1]) +
Decimal(1.0)) + ':' + "00.0"
# Strip trailing dots.
svalue = svalue.rstrip('.')
return (svalue, sunit)
开发者ID:astrocatalogs,项目名称:tidaldisruptions,代码行数:65,代码来源:clean.py
示例13: do_donated_photo
def do_donated_photo(catalog):
"""Import donated photometry."""
task_str = catalog.get_current_task_str()
# Private donations here #
if not catalog.args.travis:
pass
# End private donations #
# Ponder 05-12-17 donation
with open(
os.path.join(catalog.get_current_task_repo(), 'Donations',
'Ponder-05-12-17', 'meta.json'), 'r') as f:
metadict = json.loads(f.read())
file_names = glob(
os.path.join(catalog.get_current_task_repo(), 'Donations',
'Ponder-05-12-17', '*.dat'))
for path in file_names:
with open(path, 'r') as f:
tsvin = list(csv.reader(f, delimiter=' ', skipinitialspace=True))
oname = path.split('/')[-1].split('.')[0]
name, source = catalog.new_entry(
oname, bibcode=metadict[oname]['bibcode'])
for row in pbar(tsvin, task_str + ': Ponder ' + oname):
if row[0][0] == '#' or not is_number(row[-1]):
continue
mjd = row[1]
bandinst = row[2].split('_')
band = bandinst[0]
inst = ''
if len(bandinst) > 1:
inst = bandinst[1]
mag = row[3]
uerr = row[4]
lerr = row[5]
photodict = {
PHOTOMETRY.TIME: mjd,
PHOTOMETRY.U_TIME: 'MJD',
PHOTOMETRY.BAND: band,
PHOTOMETRY.MAGNITUDE: mag,
PHOTOMETRY.E_LOWER_MAGNITUDE: lerr,
PHOTOMETRY.E_UPPER_MAGNITUDE: uerr,
PHOTOMETRY.SOURCE: source
}
if inst:
photodict[PHOTOMETRY.INSTRUMENT] = inst
catalog.entries[name].add_photometry(**photodict)
# Benetti 03-08-17 donation
path = os.path.join(catalog.get_current_task_repo(), 'Donations',
'Benetti-03-08-17', '1999E.dat')
with open(path, 'r') as f:
tsvin = list(csv.reader(f, delimiter=' ', skipinitialspace=True))
name, source = catalog.new_entry(
'SN1999E', bibcode='2003MNRAS.340..191R')
bands = None
for row in tsvin:
if not row or row[0][0] == '#':
continue
if not bands:
bands = row[2:-2]
continue
mjd = row[1]
tel = row[-1] if 'IAUC' not in row[-1] else None
for bi, band in enumerate(bands):
mag = row[2 + 2 * bi]
if mag == '9999':
continue
err = row[2 + 2 * bi + 1]
limit = row[6] == 'True'
photodict = {
PHOTOMETRY.TIME: mjd,
PHOTOMETRY.U_TIME: 'MJD',
PHOTOMETRY.TELESCOPE: tel,
PHOTOMETRY.BAND: band,
PHOTOMETRY.MAGNITUDE: mag,
PHOTOMETRY.SOURCE: source
}
if err != '.00':
photodict[PHOTOMETRY.E_MAGNITUDE] = str(Decimal(err))
if tel:
photodict[PHOTOMETRY.TELESCOPE] = tel
catalog.entries[name].add_photometry(**photodict)
# Nicholl 01-29-17 donation
with open(
os.path.join(catalog.get_current_task_repo(), 'Donations',
'Nicholl-01-29-17', 'meta.json'), 'r') as f:
metadict = json.loads(f.read())
file_names = glob(
os.path.join(catalog.get_current_task_repo(), 'Donations',
'Nicholl-01-29-17', '*.txt'))
for path in file_names:
data = read(path, format='cds')
oname = path.split('/')[-1].split('_')[0]
name, source = catalog.new_entry(
oname, bibcode=metadict[oname]['bibcode'])
for row in pbar(data, task_str + ': Nicholl ' + oname):
photodict = {
PHOTOMETRY.TIME: str(row['MJD']),
#.........这里部分代码省略.........
开发者ID:astrocatalogs,项目名称:supernovae,代码行数:101,代码来源:donations.py
示例14: set_preferred_name
def set_preferred_name(self):
"""Set preferred name of supernova.
Highest preference goes to names of the form 'SN####AA'.
Otherwise base the name on whichever survey is the 'discoverer'.
FIX: create function to match SN####AA type names.
"""
name = self[self._KEYS.NAME]
newname = ''
aliases = self.get_aliases()
# if there are no other options to choose from, skip
if len(aliases) <= 1:
return name
# If the name is already in the form 'SN####AA' then keep using
# that
if (name.startswith('SN') and
((is_number(name[2:6]) and not is_number(name[6:])) or
(is_number(name[2:5]) and not is_number(name[5:])))):
return name
# If one of the aliases is in the form 'SN####AA' then use that
for alias in aliases:
if (alias.startswith('SN') and
((is_number(alias[2:6]) and not is_number(alias[6:])) or
(is_number(alias[2:5]) and not is_number(alias[5:])))):
newname = alias
break
# If not, name based on the 'discoverer' survey
if not newname and SUPERNOVA.DISCOVERER in self:
discoverer = ','.join(
[x['value'].upper() for x in self[SUPERNOVA.DISCOVERER]])
if 'ASAS' in discoverer:
for alias in aliases:
if 'ASASSN' in alias.upper():
newname = alias
break
if not newname and 'OGLE' in discoverer:
for alias in aliases:
if 'OGLE' in alias.upper():
newname = alias
break
if not newname and 'CRTS' in discoverer:
for alias in aliases:
if True in [
x in alias.upper()
for x in ['CSS', 'MLS', 'SSS', 'SNHUNT']
]:
newname = alias
break
if not newname and 'PS1' in discoverer:
for alias in aliases:
if 'PS1' in alias.upper():
newname = alias
break
if not newname and 'PTF' in discoverer:
for alias in aliases:
if 'PTF' in alias.upper():
newname = alias
break
if not newname and 'la silla-quest' in discoverer.lower():
for alias in aliases:
if 'LSQ' in alias.upper():
newname = alias
break
if not newname and 'GAIA' in discoverer:
for alias in aliases:
if 'GAIA' in alias.upper():
newname = alias
break
# If one of the aliases is in the form 'AT####AA' then use that
if not newname:
for alias in aliases:
if (alias.startswith('AT') and
((is_number(alias[2:6]) and not is_number(alias[6:])) or
(is_number(alias[2:5]) and not is_number(alias[5:])))):
newname = alias
break
# Otherwise, use the shortest name.
if not newname:
newname = min(aliases, key=len)
# Always prefer another alias over PSN
if not newname and name.startswith('PSN'):
for alias in aliases:
if not alias.startswith('PSN'):
newname = alias
if newname and name != newname:
file_entry = None
# Make sure new name doesn't already exist
if newname in self.catalog.entries:
if self.catalog.entries[newname]._stub:
file_entry = self.init_from_file(
self.catalog, name=newname)
else:
file_entry = self.catalog.entries[newname]
if file_entry:
self._log.info("`{}` already exists, copying `{}` to it".
format(newname, name))
self.catalog.copy_entry_to_entry(
self.catalog.entries[name], file_entry)
#.........这里部分代码省略.........
开发者ID:astrocatalogs,项目名称:supernovae,代码行数:101,代码来源:supernova.py
示例15: _clean_quantity
def _clean_quantity(self, quantity):
"""Clean quantity value before it is added to entry."""
value = quantity.get(QUANTITY.VALUE, '').strip()
error = quantity.get(QUANTITY.E_VALUE, '').strip()
unit = quantity.get(QUANTITY.U_VALUE, '').strip()
kinds = [x.strip() for x in listify(quantity.get(QUANTITY.KIND, []))]
key = quantity._key
if not value:
return False
if error and (not is_number(error) or float(error) < 0):
raise ValueError(self[self._KEYS.NAME] + "'s quanta " + key +
' error value must be a number and positive.')
# Set default units
if not unit and key == self._KEYS.VELOCITY:
unit = 'km/s'
if not unit and key == self._KEYS.RA:
unit = 'hours'
if not unit and key == self._KEYS.DEC:
unit = 'degrees'
if not unit and key in [self._KEYS.LUM_DIST, self._KEYS.COMOVING_DIST]:
unit = 'Mpc'
# Handle certain name
if key == self._KEYS.ALIAS:
value = self.catalog.clean_entry_name(value)
for df in quantity.get(self._KEYS.DISTINCT_FROM, []):
if value == df[QUANTITY.VALUE]:
return False
elif key == self._KEYS.HOST:
if is_number(value):
return False
if value.lower() in [
'anonymous', 'anon.', 'anon', 'intergalactic'
]:
return False
value = host_clean(value)
if ((not kinds and ((value.lower().startswith('abell') and
is_number(value[5:].strip())) or
'cluster' in value.lower()))):
kinds = ['cluster']
elif key == self._KEYS.HOST_REDSHIFT:
kinds = list(filter(lambda x: x != 'host', kinds))
elif key == self._KEYS.CLAIMED_TYPE:
isq = False
if value.startswith('SN '):
value = value.replace('SN ', '', 1)
value = value.replace('young', '')
if '?' in value:
isq = True
value = value.strip(' ?')
for rep in self.catalog.type_syns:
if value in self.catalog.type_syns[rep]:
value = rep
break
if isq:
value = value + '?'
if not value:
return False
elif key in [
self._KEYS.RA, self._KEYS.DEC, self._KEYS.HOST_RA,
self._KEYS.HOST_DEC
]:
(value, unit) = radec_clean(value, key, unit=unit)
elif key == self._KEYS.MAX_DATE or key == self._KEYS.DISCOVER_DATE:
# Make sure month and day have leading zeroes
sparts = value.split('/')
if len(sparts[0]) > 5:
self._log.warn("Date year {} greater than four "
"digits.".format(sparts[0]))
if len(sparts) >= 2:
value = sparts[0] + '/' + sparts[1].zfill(2)
if len(sparts) == 3:
value = value + '/' + sparts[2].zfill(2)
# for ii, ct in enumerate(self.parent[key]):
# # Only add dates if they have more information
# if len(ct[QUANTITY.VALUE].split('/')) >
# len(value.split('/')):
# return False
if is_number(value):
value = '%g' % Decimal(value)
if error:
error = '%g' % Decimal(error)
if value:
quantity[QUANTITY.VALUE] = value
if error:
quantity[QUANTITY.E_VALUE] = error
if unit:
quantity[QUANTITY.U_VALUE] = unit
if kinds:
quantity[QUANTITY.KIND] = kinds if len(kinds) > 1 else kinds[0]
elif QUANTITY.KIND in quantity:
del (quantity[QUANTITY.KIND])
return True
开发者ID:astrocatalogs,项目名称:supernovae,代码行数:100,代码来源:supernova.py
示例16: do_suspect_photo
def do_suspect_photo(catalog):
task_str = catalog.get_current_task_str()
with open(os.path.join(catalog.get_current_task_repo(),
'suspectreferences.csv'), 'r') as f:
tsvin = csv.reader(f, delimiter=',', skipinitialspace=True)
suspectrefd
|
请发表评论