Skip to content
Snippets Groups Projects
Commit 91958f15 authored by Jae-Joon Lee's avatar Jae-Joon Lee
Browse files

initial commit

parents
Branches
Tags
No related merge requests found
#!/usr/bin/env python
# coding: utf-8
from starlette.requests import Request
import ray
from ray import serve
import os
import numpy as np
from spherex_qc import SPHERExQCHandler as _SPHERExQCHandler
# download data
minio_endpoint = "http://210.110.233.67:9005"
bucket = "public"
file_path = "spherex-qc/zodicube2_4x6_21Mar.npy"
fn = os.path.join("data", os.path.basename(file_path))
url = f"{minio_endpoint}/{bucket}/{file_path}"
url, fn
if not os.path.exists(fn):
print(f"downloading {url} -> {fn}")
os.system(f"curl -o {fn} {url}")
print("file downloaded")
ray.init("auto")
# Load the data and put it on the shared memory
fn = "data/zodicube2_4x6_21Mar.npy"
data = np.load(fn)
zodi_data = dict((int(k), data[k]) for k in "123456")
r_zodi_data = ray.put(zodi_data)
class SPHERExQCHandler(_SPHERExQCHandler):
"Derived class to suuport ray.get for data loading"
def __init__(self, r_zodi_data):
zodi_data = ray.get(r_zodi_data)
_SPHERExQCHandler.__init__(self, zodi_data)
SPHERExQCDeployment = serve.deployment(SPHERExQCHandler)
SPHERExQCDeployment.deploy(r_zodi_data)
qc_handle = SPHERExQCDeployment.get_handle()
releases_info = {"releases": []}
RELEASENAME = "kasi20211021pre01"
RELEASEDATE = "20211012"
api_prefix = f"/api/release/{RELEASENAME}/query"
releases_info["releases"].append(dict(release_name="kasi20211021pre01",
release_date="2021-10-21",
api_prefix=api_prefix))
@serve.deployment(route_prefix=api_prefix)
class ReleaseHandler:
def __init__(self, qc_handle):
self.qc_handle = qc_handle
async def __call__(self, request: Request):
ra = request.query_params.get("ra", None)
dec = request.query_params.get("dec", None)
name = request.query_params.get("name", "")
zodi = request.query_params.get("zodi", False)
tbl = await qc_handle.query.remote(name, ra, dec, zodi=zodi)
d = tbl.to_pandas().to_dict("split")
return d
ReleaseHandler.deploy(qc_handle)
@serve.deployment(route_prefix=f"/api/releases")
class Releases:
def __init__(self, releases_info):
self.releases_info = releases_info
def __call__(self, request: Request):
return self.releases_info
Releases.deploy(releases_info)
import os
import numpy as np
import astropy.units as u
from astropy.coordinates import SkyCoord, ICRS
import SPHEREx_ObsSimulator as SPobs
import SPHEREx_InstrumentSimulator as SPinst
import SPHEREx_SkySimulator as SPsky
from SPHEREx_SkySimulator.quicker_catalog import (
QuickerCatalogFromZodiCube
)
from astropy.coordinates import SkyCoord
# from SPHEREx_SkySimulator import Catalog_to_Simulate as _Catalog_to_Simulate
from SPHEREx_Simulator_Tools import data_filename
# from scipy import interpolate
class SPHERExQCHandler:
@staticmethod
def get_spherex_default_setting():
# Get a SPHEREx Survey Plan
survey_plan_file = data_filename("spherex_survey_plan_march_2021.fits")
psf_file = data_filename("psf/simulated_PSF_database.fits")
SPHEREx_Pointings = SPobs.Pointings(input_file=survey_plan_file,
Gaussian_jitter = 0.0,
roll_angle='psi2')
# Get an SPHEREx Instrument
SPHEREx_Instrument = SPinst.Instrument(
psf=psf_file,
psf_downsample_by_array = {1:4, 2:4, 3:4, 4:2, 5:2, 6:2},
psf_trim_by_array = {1:32, 2:32, 3:32, 4:32, 5:32, 6:32},
noise_model = SPinst.white_noise,
dark_current_model = SPinst.poisson_dark_current,
lvf_model = SPinst.smile_lvf)
# Set up a sky scene in order to initialize a background model
Scene = SPsky.Scene(SPHEREx_Pointings,
zodi_model=SPsky.zodicalc.ModifiedKelsallModelWithHPFT())
return dict(pointing=SPHEREx_Pointings,
inst=SPHEREx_Instrument,
scene=Scene)
def __init__(self, zodi_data, survey_plan_file=None):
if survey_plan_file is None:
survey_plan_file = data_filename("spherex_survey_plan_march_2021.fits")
# psf_file = data_filename('psf/simulated_PSF_database.fits')
# self.pointings = SPobs.Pointings(input_file=survey_plan_file,
# Gaussian_jitter = 0.0,
# roll_angle='psi2')
# # Get an SPHEREx Instrument
# self.inst = SPinst.Instrument(psf=psf_file,
# psf_downsample_by_array = {1:4, 2:4, 3:4, 4:2, 5:2, 6:2},
# psf_trim_by_array = {1:32, 2:32, 3:32, 4:32, 5:32, 6:32},
# noise_model = SPinst.white_noise,
# dark_current_model = SPinst.poisson_dark_current,
# lvf_model = SPinst.smile_lvf)
ss = self.get_spherex_default_setting()
zodi_model = ss['scene'].zodi_model
self.qc = QuickerCatalogFromZodiCube(ss["pointing"],
ss["inst"],
zodi_model._itp_solspect,
zodi_model._itp_zlref,
zodi_data)
# self.qc = QuickerCatalogFromZodiCube(
# self.pointings, self.inst,
# zodi_cube_file=zodi_cube_file
# )
def query(self, name, ra, dec, zodi=False):
# name, ra, dec = "M31", 10.68471, 41.26875
c = SkyCoord(ra, dec, unit="degree", frame=ICRS())
tbl = self.qc.find_obs(name, c)
if zodi:
tbl["ZODI"] = self.qc.get_zodi(tbl)
return tbl
def get_zodi(self, tbl):
return self.qc.get_zodi(tbl)
def main():
zodi_cube_file = "/home/jjlee/work_active/spherex/SPHEREx-Sky-Simulator/py/SPHEREx_SkySimulator/quicker_catalog/zodicube_5x5_21Mar.npy"
handler = SPHERExQCHandler(zodi_cube_file)
k = handler.query('test', 10.68, 41.2)
kz = handler.query('test', 10.68, 41.2, zodi=True)
if False:
# fn = "zodicube2_4x6_21Mar.npy"
# fn = "/home/jjlee/work_active/spherex/SPHEREx-Sky-Simulator/docs/QuickCatalog/zodicube_5x5_21Mar.npy"
fn = "zodicube2_4x6_21Mar.npy"
data = np.load(fn)
zodi_data = dict((int(k), data[k]) for k in "123456")
handler = SPHERExQCHandler(zodi_data)
k = handler.query('test', 10.68, 41.2)
kz = handler.query('test', 10.68, 41.2, zodi=True)
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment