def from_cone(ra, dec, error, dateobs): localization_name = "%.5f_%.5f_%.5f" % (ra, dec, error) center = SkyCoord(ra * u.deg, dec * u.deg) radius = error * u.deg # Determine resolution such that there are at least # 16 pixels across the error radius. hpx = HEALPix(pixel_resolution_to_nside(radius / 16, round='up'), 'nested', frame=ICRS()) # Find all pixels in the 4-sigma error circle. ipix = hpx.cone_search_skycoord(center, 4 * radius) # Convert to multi-resolution pixel indices and sort. uniq = moc.nest2uniq(nside_to_level(hpx.nside), ipix) i = np.argsort(uniq) ipix = ipix[i] uniq = uniq[i] # Evaluate Gaussian. distance = hpx.healpix_to_skycoord(ipix).separation(center) probdensity = np.exp(-0.5 * np.square(distance / radius).to_value( u.dimensionless_unscaled)) probdensity /= probdensity.sum() * hpx.pixel_area.to_value(u.steradian) models.db.session.merge( models.Localization( localization_name=localization_name, dateobs=dateobs, uniq=uniq.tolist(), probdensity=probdensity.tolist())) models.db.session.commit() return localization_name
def from_cone(ra, dec, error): localization_name = "%.5f_%.5f_%.5f" % (ra, dec, error) center = SkyCoord(ra * u.deg, dec * u.deg) radius = error * u.deg # Determine resolution such that there are at least # 16 pixels across the error radius. hpx = HEALPix(pixel_resolution_to_nside(radius / 16, round='up'), 'nested', frame=ICRS()) # Find all pixels in the 4-sigma error circle. ipix = hpx.cone_search_skycoord(center, 4 * radius) # Convert to multi-resolution pixel indices and sort. uniq = ligo.skymap.moc.nest2uniq(nside_to_level(hpx.nside), ipix.astype(np.int64)) i = np.argsort(uniq) ipix = ipix[i] uniq = uniq[i] # Evaluate Gaussian. distance = hpx.healpix_to_skycoord(ipix).separation(center) probdensity = np.exp( -0.5 * np.square(distance / radius).to_value(u.dimensionless_unscaled)) probdensity /= probdensity.sum() * hpx.pixel_area.to_value(u.steradian) skymap = table.Table( [np.asarray(uniq), np.asarray(probdensity)], names=['UNIQ', 'PROBDENSITY']) return skymap, uniq