Skip to content

Commit

Permalink
#158 Merge pull request from deshima-dev/astropenguin/issue154
Browse files Browse the repository at this point in the history
Use temporary directory for default reduced directory
  • Loading branch information
astropenguin authored Jul 22, 2024
2 parents b53d96d + 0c5c226 commit cbf93eb
Show file tree
Hide file tree
Showing 3 changed files with 87 additions and 65 deletions.
144 changes: 81 additions & 63 deletions demerge/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,12 @@


# standard library
from collections.abc import Iterator
from contextlib import contextmanager
from logging import DEBUG, basicConfig, getLogger
from pathlib import Path
from typing import Any, Literal
from tempfile import TemporaryDirectory
from typing import Any, Literal, Optional


# dependencies
Expand All @@ -20,7 +22,18 @@


@contextmanager
def set_logger(debug: bool):
def set_dir(dir: Optional[Path] = None, /) -> Iterator[Path]:
"""Resolve a directory or set a temporary directory."""
if dir is None:
with TemporaryDirectory() as temp_dir:
yield Path(temp_dir)
else:
yield Path(dir).expanduser().resolve()


@contextmanager
def set_logger(debug: bool, /) -> Iterator[None]:
"""Temporarily set the level of the module logger."""
level = LOGGER.level

if debug:
Expand All @@ -39,7 +52,7 @@ def demerge(
# data paths
data_dir: Path = Path(),
dems_dir: Path = Path(),
reduced_dir: Path = Path(),
reduced_dir: Optional[Path] = None,
ddb: Path = PACKAGE_DATA / "ddb_20240713.fits.gz",
# merge options
measure: Literal["df/f", "brightness"] = "df/f",
Expand All @@ -57,6 +70,7 @@ def demerge(
i.e. expecting ``${dems_dir}/dems_YYYYmmddHHMMSS.zarr.zip``.
reduced_dir: Path where reduced data directory will be placed,
i.e. expecting ``${reduced_dir}/reduced_YYYYmmddHHMMSS``.
If not specified, a temporary directory will be used.
ddb: Path of DDB (DESHIMA database) file.
measure: Measure of the DEMS (either df/f or brightness).
overwrite: If True, reduced data directory and merged DEMS file
Expand All @@ -72,66 +86,70 @@ def demerge(
for key, val in locals().items():
LOGGER.debug(f"{key}: {val!r}")

data_dir_ = Path(data_dir).resolve() / f"cosmos_{obsid}"
reduced_dir_ = Path(reduced_dir).resolve() / f"reduced_{obsid}"
dems_dir_ = Path(dems_dir).resolve()
ddb = Path(ddb).resolve()

# Run reduce function
readout = reduce.reduce(
data_dir=data_dir_,
reduced_dir=reduced_dir_,
overwrite=overwrite,
debug=debug,
)

# Run merge function
if (dems := dems_dir_ / f"dems_{obsid}.zarr.zip").exists() and not overwrite:
raise FileExistsError(dems)

if not (corresp := data_dir_ / "kid_corresp.json").exists():
raise FileNotFoundError(corresp)

if not ddb.exists():
raise FileNotFoundError(ddb)

if not (obsinst := data_dir_ / f"{obsid}.obs").exists():
raise FileNotFoundError(obsinst)

if not (antenna := data_dir_ / f"{obsid}.ant").exists():
antenna = None

if not (cabin := data_dir_ / f"{obsid}.cabin").exists():
cabin = None

if not (misti := data_dir_ / f"{obsid}.misti").exists():
misti = None

if not (skychop := data_dir_ / f"{obsid}.skychopper.dat.xz").exists():
skychop = None

if not (weather := data_dir_ / f"{obsid}.wea").exists():
weather = None

return merge.merge(
dems,
# required datasets
corresp=corresp,
ddb=ddb,
obsinst=obsinst,
readout=readout,
# optional datasets
antenna=antenna,
cabin=cabin,
misti=misti,
skychop=skychop,
weather=weather,
# merge options
measure=measure,
overwrite=overwrite,
debug=debug,
**options,
)
with (
set_dir(data_dir) as data_dir,
set_dir(dems_dir) as dems_dir,
set_dir(reduced_dir) as reduced_dir,
):
data_dir_ = Path(data_dir).resolve() / f"cosmos_{obsid}"
dems_dir_ = Path(dems_dir).resolve()
reduced_dir_ = reduced_dir / f"reduced_{obsid}"

# Run reduce function
readout = reduce.reduce(
data_dir=data_dir_,
reduced_dir=reduced_dir_,
overwrite=overwrite,
debug=debug,
)

# Run merge function
if (dems := dems_dir_ / f"dems_{obsid}.zarr.zip").exists() and not overwrite:
raise FileExistsError(dems)

if not (corresp := data_dir_ / "kid_corresp.json").exists():
raise FileNotFoundError(corresp)

if not (ddb := Path(ddb).resolve()).exists():
raise FileNotFoundError(ddb)

if not (obsinst := data_dir_ / f"{obsid}.obs").exists():
raise FileNotFoundError(obsinst)

if not (antenna := data_dir_ / f"{obsid}.ant").exists():
antenna = None

if not (cabin := data_dir_ / f"{obsid}.cabin").exists():
cabin = None

if not (misti := data_dir_ / f"{obsid}.misti").exists():
misti = None

if not (skychop := data_dir_ / f"{obsid}.skychopper.dat.xz").exists():
skychop = None

if not (weather := data_dir_ / f"{obsid}.wea").exists():
weather = None

return merge.merge(
dems,
# required datasets
corresp=corresp,
ddb=ddb,
obsinst=obsinst,
readout=readout,
# optional datasets
antenna=antenna,
cabin=cabin,
misti=misti,
skychop=skychop,
weather=weather,
# merge options
measure=measure,
overwrite=overwrite,
debug=debug,
**options,
)


def cli() -> None:
Expand Down
4 changes: 3 additions & 1 deletion demerge/merge/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@


# standard library
from collections.abc import Iterator
from contextlib import contextmanager
from logging import DEBUG, basicConfig, getLogger
from pathlib import Path
Expand All @@ -22,7 +23,8 @@


@contextmanager
def set_logger(debug: bool):
def set_logger(debug: bool, /) -> Iterator[None]:
"""Temporarily set the level of the module logger."""
level = LOGGER.level

if debug:
Expand Down
4 changes: 3 additions & 1 deletion demerge/reduce/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@


# standard library
from collections.abc import Iterator
from contextlib import contextmanager
from logging import DEBUG, basicConfig, getLogger
from pathlib import Path
Expand All @@ -25,7 +26,8 @@


@contextmanager
def set_logger(debug: bool):
def set_logger(debug: bool, /) -> Iterator[None]:
"""Temporarily set the level of the module logger."""
level = LOGGER.level

if debug:
Expand Down

0 comments on commit cbf93eb

Please sign in to comment.