OpenNGC
OpenNGC is a database containing positions and main data of NGC (New
General Catalogue) and IC (Index Catalogue) objects. It has been built by
merging data from NED, HyperLEDA, SIMBAD, and several databases available
at HEASARC.
In this VO publication, we have changed most of the column names, mostly
to make them work as ADQL column names without resorting to delimited
identifiers. The mapping should be obvious.
2017-07-18T14:00:00
50
nebulae
surveys
Verga, M.
https://github.com/mattiaverga/OpenNGC
Research
Catalog
Updated to
upstream commit 1739 7545, which added a few objects
and fixed some minor mistakes.
Updated to
upstream commit 4ffc 6be0, which adds proper motions and
radial velocities/redshifts to many objects.
Updated to
upstream commit da4b 5cb1, which improves the presentation
of the sources of the data.
Updated to
upstream commit 3ae3ee5, containing numerous fixes after
a comparison with Harold Corwin's notes.
Updated to
v20200329; also adding the first outlines as MOCs
Updated to
v20191019
Updated to
v20190920
Updated to
v20190609
10.21938/y.1ejWUD_MQ6b_eDFoVbbw
The OpenNGC object list with the main
metadata
Position ICRS Epoch J2000 "raj2000" "dej2000"
bandid, bandname, ucd
B, B Band, em.opt.B
V, V Band, em.opt.V
J, J Band, em.ir.J
H, H Band, em.ir.H
K, K Band, em.ir.K
bandid, bandname, ucd
U, U Band, em.opt.U
B, B Band, em.opt.B
V, V Band, em.opt.V
The object type is encoded as follows:
=========== ========================================
``*`` Star
``**`` Double star
``*Ass`` Association of stars
``OCl`` Open Cluster
``GCl`` Globular Cluster
``Cl+N`` Star cluster + Nebula
``G`` Galaxy
``GPair`` Galaxy Pair
``GTrpl`` Galaxy Triplet
``GGroup`` Group of galaxies
``PN`` Planetary Nebula
``HII`` HII Ionized region
``DrkN`` Dark Nebula
``EmN`` Emission Nebula
``Neb`` Nebula
``RfN`` Reflection Nebula
``SNR`` Supernova remnant
``Nova`` Nova star
``NonEx`` Nonexistent object
``Dup`` Duplicated object (cf. NGC or IC column)
``Other`` See object notes
=========== ========================================
The numbers correspond to the following resources:
== ==============================================
1 `NASA Extragalactic Database`_
2 `SIMBAD Astronomical Database`_
3 HyperLeda (:bibcode:`2003A&A...412...45P`)
4 Harold Corwin's NGC/IC Positions and Notes
5 `HEASARC mwsc table`_
6 `HEASARC smcclustrs table`_
7 `HEASARC lmcextobj table`_
8 `HEASARC plnebulae table`_
9 `HEASARC lbn table`_
10 `HEASARC messier table`_
11 `HEASARC lyngaclust table`_
99 OpenNGC revised data
== ==============================================
.. _NASA Extragalactic Database: http://ned.ipac.caltech.edu/forms/data.html
.. _SIMBAD Astronomical Database: http://simbad.u-strasbg.fr/simbad/sim-fbasic
.. _HEASARC mwsc table: https://heasarc.gsfc.nasa.gov/W3Browse/all/mwsc.html
.. _HEASARC smcclustrs table: https://heasarc.gsfc.nasa.gov/W3Browse/all/smcclustrs.html
.. _HEASARC lmcextobj table: https://heasarc.gsfc.nasa.gov/W3Browse/all/lmcextobj.html
.. _HEASARC plnebulae table: https://heasarc.gsfc.nasa.gov/W3Browse/all/plnebulae.html
.. _HEASARC lbn table: https://heasarc.gsfc.nasa.gov/W3Browse/all/lbn.html
.. _HEASARC messier table: https://heasarc.gsfc.nasa.gov/W3Browse/all/messier.html
.. _HEASARC lyngaclust table: https://heasarc.gsfc.nasa.gov/W3Browse/all/lyngaclust.html
dest, src
name, Name
obj_type, Type
constellation, Const
pos_ang, PosAng
mag_b, B-Mag
mag_v, V-Mag
mag_j, J-Mag
mag_h, H-Mag
mag_k, K-Mag
surf_br_B, SurfBr
cstar_mag_u, Cstar U-Mag
cstar_mag_b, Cstar B-Mag
cstar_mag_v, Cstar V-Mag
messier_nr, M
other_ngc, NGC
ic_cross, IC
cstar_id, Cstar Names
other_id, Identifiers
comname, Common names
ned_notes, NED notes
notes, OpenNGC notes
pmra, Pm-RA
pmdec, Pm-Dec
rv, RadVel
z, Redshift
Hand-drawn coverages of selected openngc objects.
Up to three coverages at different surface brightness are obtained
using the default DSS2 Color layer in Aladin.
Usually, the level 2 shape is taken with default histogram, while level 1
and level 3 use, respectvely, the first and the last half of the
histogram.
set()
12
def parseShapeFile(f):
polys = [[]]
for lnNo, ln in enumerate(f):
if ln.startswith("line"):
parts = ln.split()
if parts[1] in '*+.':
polys[-1].extend((float(parts[2]), float(parts[3])))
else:
raise utils.SourceParseError("Bad line",
offending=ln, location=str(lnNo+1),
source=f.name)
if parts[1]=='*':
polys.append([])
# For some odd reason, the first point in each shape file appears
# to be duplicated. Chuck it for now.
polys[0][:2] = []
if not polys[-1]:
del polys[-1]
parts = [
getASCIIMOCForPoly(pgsphere.SPoly.fromDALI(p))
for p in polys]
return " ".join(parts)+" "+str(mocOrder)+"/"
def parseShapeFor(ri, objName, level):
ri.sourceToken = rd.getAbsPath(
"data/outlines/objects/%s_lv%s.txt"%(objName, level))
try:
with open(ri.sourceToken, "r") as f:
return parseShapeFile(f)
except IOError:
# we believe the shape doesn't exist
return None
def parseShapeFileName(fName):
mat = re.match("(.*)_lv([0-9]).txt", os.path.basename(fName))
return mat.group(1), mat.group(2)
# The following is lifted from cdshealpix's healpix.py;
# The C++ healpix code can't deal with the polygons here,
# and thus we're using the rust version (which this expects
# in cdshealpix/; that's not in the VCS).
from cffi import FFI
ffi = FFI()
ffi.cdef("""
typedef struct {
uint8_t depth;
uint64_t hash;
uint8_t flag;
} bmoc_cell;
typedef struct {
uint32_t ncells;
bmoc_cell* cells;
} bmoc;
void bmoc_free(bmoc* bmoc);
bmoc* hpx_query_polygon_approx(unsigned char depth,
int n_vertices, double* vertices_coords);""")
cdshealpix = ffi.dlopen(rd.getAbsPath(
"cdshealpix/libcdshealpix_ffi.so"))
def getASCIIMOCForPoly(poly):
"""returns an ASCII MOC for an SPoly p.
"""
coos = []
for pt in poly.points:
coos.extend([pt.x, pt.y])
cells = cdshealpix.hpx_query_polygon_approx(
mocOrder,
len(coos)//2,
coos)
parts = []
for i in range(cells.ncells):
parts.append("%s/%s"%(
cells.cells[i].depth,
cells.cells[i].hash))
cdshealpix.bmoc_free(cells)
return " ".join(parts)
objectName, level = parseShapeFileName(self.sourceToken)
if objectName in seenObjs:
return
seenObjs.add(objectName)
rec = {"name": objectName, "deepest_shape": None}
for level in range(1,4):
rec["shape_level%d"%level] = parseShapeFor(self, objectName, level)
if rec["deepest_shape"] is None:
rec["deepest_shape"] = rec["shape_level%d"%level]
yield rec
`_.
]]>
date: 2023-11-08
date.role: ExportRequested
openNGC
202.46
47.2
0.1
/tap/sync
row = self.getFirstVOTableRow()
self.assertEqual(row["constellation"], "Tau")
self.assertAlmostEqual(row["raj2000"], 83.633208333)
self.assertAlmostEqual(row["maj_ax_deg"], 0.13333334)
self.assertAlmostEqual(row["name"], "NGC1952")
/tap/sync
self.assertEqual(self.getVOTableRows(), [])
/openngc/q/web/form
self.assertHasStrings("NGC5195", "571.0", "5.50", " V-Mag:3 ")
/openngc/q/web/scs.xml
row = self.getFirstVOTableRow(rejectExtras=False)
self.assertAlmostEqual(row["z"], 0.0015500000)
self.assertAlmostEqual(row["maj_ax_deg"], 0.22849999368190765)