Skip to content

Commit

Permalink
Add Observatory.from_json and to_json
Browse files Browse the repository at this point in the history
  • Loading branch information
moeyensj committed Sep 19, 2024
1 parent f56686b commit c492e1b
Show file tree
Hide file tree
Showing 7 changed files with 107 additions and 3 deletions.
2 changes: 1 addition & 1 deletion src/adam_test_data/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
from adam_core.time import Timestamp

from .noise import generate_noise
from .observatory import Observatory, observatory_to_sorcha_config
from .observatories import Observatory, observatory_to_sorcha_config
from .pointings import Pointings
from .populations import (
SmallBodies,
Expand Down
2 changes: 1 addition & 1 deletion src/adam_test_data/noise.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
from jax import Array
from scipy.stats import skewnorm

from .observatory import Observatory
from .observatories import Observatory
from .pointings import Pointings


Expand Down
13 changes: 13 additions & 0 deletions src/adam_test_data/observatories/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
from .observatory import (
FieldOfView,
Observatory,
Simulation,
observatory_to_sorcha_config,
)

__all__ = [
"FieldOfView",
"Observatory",
"Simulation",
"observatory_to_sorcha_config",
]
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import json
from dataclasses import dataclass
from typing import Literal, Optional

Expand Down Expand Up @@ -69,6 +70,75 @@ class Observatory:
fov: FieldOfView
simulation: Simulation

@classmethod
def from_json(cls, file: str) -> "Observatory":
"""
Load an observatofy from a JSON file.
Parameters
----------
file : str
The path to the JSON file.
Returns
-------
Observatory
The observatory object.
"""
with open(file, "r") as f:
data = json.load(f)

code = data["code"]
filters = data["filters"]
main_filter = data["main_filter"]
bright_limit = data["bright_limit"]
fov = FieldOfView(
camera_model=data["fov"]["camera_model"],
circle_radius=data["fov"]["circle_radius"],
fill_factor=data["fov"]["fill_factor"],
)
simulation = Simulation(
ang_fov=data["simulation"]["ang_fov"],
fov_buffer=data["simulation"]["fov_buffer"],
)

return Observatory(
code=code,
filters=filters,
main_filter=main_filter,
bright_limit=bright_limit,
fov=fov,
simulation=simulation,
)

def to_json(self, file: str) -> None:
"""
Save the observatory to a JSON file.
Parameters
----------
file : str
The path to the JSON file.
"""
data = {
"code": self.code,
"filters": self.filters,
"main_filter": self.main_filter,
"bright_limit": self.bright_limit,
"fov": {
"camera_model": self.fov.camera_model,
"circle_radius": self.fov.circle_radius,
"fill_factor": self.fov.fill_factor,
},
"simulation": {
"ang_fov": self.simulation.ang_fov,
"fov_buffer": self.simulation.fov_buffer,
},
}

with open(file, "w") as f:
json.dump(data, f, indent=4)


def observatory_to_sorcha_config(
observatory: Observatory,
Expand Down
Empty file.
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import tempfile

import pytest

from ..observatory import (
Expand Down Expand Up @@ -181,3 +183,22 @@ def test_observatory_to_sorcha_config_raises() -> None:
main_filter="r",
)
observatory_to_sorcha_config(obs)


def test_Observatory_to_from_json() -> None:
# Test that we can round trip an Observatory object to and from a JSON file.
with tempfile.NamedTemporaryFile(suffix=".json") as temp_file:
obs = Observatory(
code="X05",
filters=["u", "g", "r", "i", "z", "y"],
bright_limit=[16, 16, 16, 16, 16, 16],
fov=FieldOfView(camera_model="circle", fill_factor=0.9, circle_radius=3),
simulation=Simulation(ang_fov=1.0, fov_buffer=0.1),
main_filter="r",
)

obs.to_json(temp_file.name)

obs2 = Observatory.from_json(temp_file.name)

assert obs == obs2
2 changes: 1 addition & 1 deletion src/adam_test_data/tests/test_main.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
from adam_core.time import Timestamp

from ..main import generate_test_data, sorcha, write_sorcha_inputs
from ..observatory import FieldOfView, Observatory, Simulation
from ..observatories import FieldOfView, Observatory, Simulation
from ..pointings import Pointings
from ..populations import PhotometricProperties, SmallBodies

Expand Down

0 comments on commit c492e1b

Please sign in to comment.