Skip to content

Commit c202434

Browse files
committed
move date stackers into their own submodule
1 parent aa7be99 commit c202434

File tree

3 files changed

+142
-133
lines changed

3 files changed

+142
-133
lines changed

rubin_sim/maf/stackers/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from .base_stacker import *
22
from .coord_stackers import *
3+
from .date_stackers import *
34
from .general_stackers import *
45
from .get_col_info import *
56
from .label_stackers import *
Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
__all__ = (
2+
"ObservationStartDatetime64Stacker",
3+
"DayObsStacker",
4+
"DayObsMJDStacker",
5+
"DayObsISOStacker",
6+
)
7+
8+
import numpy as np
9+
from astropy.time import Time
10+
11+
from .base_stacker import BaseStacker
12+
13+
14+
class ObservationStartDatetime64Stacker(BaseStacker):
15+
"""Add the observation start time as a numpy.datetime64."""
16+
17+
cols_added = ["observationStartDatetime64"]
18+
19+
def __init__(
20+
self,
21+
mjd_col="observationStartMJD",
22+
):
23+
self.mjd_col = mjd_col
24+
self.units = [None]
25+
self.cols_added_dtypes = ["datetime64[ns]"]
26+
27+
def _run(self, sim_data, cols_present=False):
28+
if cols_present:
29+
# Column already present in data; assume it is correct and does not
30+
# need recalculating.
31+
return sim_data
32+
33+
sim_data["observationStartDatetime64"] = Time(sim_data[self.mjd_col], format="mjd").datetime64
34+
35+
return sim_data
36+
37+
38+
def _compute_day_obs_mjd(mjd):
39+
day_obs_mjd = np.floor(mjd - 0.5).astype("int")
40+
return day_obs_mjd
41+
42+
43+
def _compute_day_obs_astropy_time(mjd):
44+
day_obs_time = Time(_compute_day_obs_mjd(mjd), format="mjd")
45+
return day_obs_time
46+
47+
48+
def _compute_day_obs_iso8601(mjd):
49+
iso_times = _compute_day_obs_astropy_time(mjd).iso
50+
51+
# Work both for mjd as a scalar and a numpy array
52+
if isinstance(iso_times, str):
53+
day_obs_iso = iso_times[:10]
54+
else:
55+
day_obs_iso = np.array([d[:10] for d in iso_times])
56+
57+
return day_obs_iso
58+
59+
60+
def _compute_day_obs_int(mjd):
61+
day_obs_int = np.array([d.replace("-", "") for d in _compute_day_obs_iso8601(mjd)])
62+
63+
return day_obs_int
64+
65+
66+
class DayObsStacker(BaseStacker):
67+
"""Add dayObs as, as defined by SITCOMTN-32.
68+
69+
Parameters
70+
----------
71+
mjd_col : `str`
72+
The column with the observatin start MJD.
73+
"""
74+
75+
cols_added = ["dayObs"]
76+
77+
def __init__(self, mjd_col="observationStartMJD"):
78+
self.mjd_col = mjd_col
79+
self.units = ["days"]
80+
self.cols_added_dtypes = [int]
81+
82+
def _run(self, sim_data, cols_present=False):
83+
if cols_present:
84+
# Column already present in data; assume it is correct and does not
85+
# need recalculating.
86+
return sim_data
87+
88+
sim_data[self.cols_added[0]] = _compute_day_obs_int(sim_data[self.mjd_col])
89+
return sim_data
90+
91+
92+
class DayObsMJDStacker(BaseStacker):
93+
"""Add dayObs defined by SITCOMTN-32, as an MJD.
94+
95+
Parameters
96+
----------
97+
mjd_col : `str`
98+
The column with the observatin start MJD.
99+
"""
100+
101+
cols_added = ["day_obs_mjd"]
102+
103+
def __init__(self, mjd_col="observationStartMJD"):
104+
self.mjd_col = mjd_col
105+
self.units = ["days"]
106+
self.cols_added_dtypes = [int]
107+
108+
def _run(self, sim_data, cols_present=False):
109+
if cols_present:
110+
# Column already present in data; assume it is correct and does not
111+
# need recalculating.
112+
return sim_data
113+
114+
sim_data[self.cols_added[0]] = _compute_day_obs_mjd(sim_data[self.mjd_col])
115+
return sim_data
116+
117+
118+
class DayObsISOStacker(BaseStacker):
119+
"""Add dayObs as defined by SITCOMTN-32, in ISO 8601 format.
120+
121+
Parameters
122+
----------
123+
mjd_col : `str`
124+
The column with the observatin start MJD."""
125+
126+
cols_added = ["day_obs_iso8601"]
127+
128+
def __init__(self, mjd_col="observationStartMJD"):
129+
self.mjd_col = mjd_col
130+
self.units = [None]
131+
self.cols_added_dtypes = [(str, 10)]
132+
133+
def _run(self, sim_data, cols_present=False):
134+
if cols_present:
135+
# Column already present in data; assume it is correct and does not
136+
# need recalculating.
137+
return sim_data
138+
139+
sim_data[self.cols_added[0]] = _compute_day_obs_iso8601(sim_data[self.mjd_col])
140+
return sim_data

rubin_sim/maf/stackers/general_stackers.py

Lines changed: 1 addition & 133 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,6 @@
77
"DcrStacker",
88
"FiveSigmaStacker",
99
"SaturationStacker",
10-
"ObservationStartDatetime64Stacker",
11-
"DayObsStacker",
12-
"DayObsMJDStacker",
13-
"DayObsISOStacker",
1410
"OverheadStacker",
1511
)
1612

@@ -25,6 +21,7 @@
2521
from rubin_sim.maf.utils import load_inst_zeropoints
2622

2723
from .base_stacker import BaseStacker
24+
from .date_stackers import DayObsMJDStacker
2825

2926

3027
class SaturationStacker(BaseStacker):
@@ -510,135 +507,6 @@ def _run(self, sim_data, cols_present=False):
510507
return sim_data
511508

512509

513-
class ObservationStartDatetime64Stacker(BaseStacker):
514-
"""Add the observation start time as a numpy.datetime64."""
515-
516-
cols_added = ["observationStartDatetime64"]
517-
518-
def __init__(
519-
self,
520-
mjd_col="observationStartMJD",
521-
):
522-
self.mjd_col = mjd_col
523-
self.units = [None]
524-
self.cols_added_dtypes = ["datetime64[ns]"]
525-
526-
def _run(self, sim_data, cols_present=False):
527-
if cols_present:
528-
# Column already present in data; assume it is correct and does not
529-
# need recalculating.
530-
return sim_data
531-
532-
sim_data["observationStartDatetime64"] = Time(sim_data[self.mjd_col], format="mjd").datetime64
533-
534-
return sim_data
535-
536-
537-
def _compute_day_obs_mjd(mjd):
538-
day_obs_mjd = np.floor(mjd - 0.5).astype("int")
539-
return day_obs_mjd
540-
541-
542-
def _compute_day_obs_astropy_time(mjd):
543-
day_obs_time = Time(_compute_day_obs_mjd(mjd), format="mjd")
544-
return day_obs_time
545-
546-
547-
def _compute_day_obs_iso8601(mjd):
548-
iso_times = _compute_day_obs_astropy_time(mjd).iso
549-
550-
# Work both for mjd as a scalar and a numpy array
551-
if isinstance(iso_times, str):
552-
day_obs_iso = iso_times[:10]
553-
else:
554-
day_obs_iso = np.array([d[:10] for d in iso_times])
555-
556-
return day_obs_iso
557-
558-
559-
def _compute_day_obs_int(mjd):
560-
day_obs_int = np.array([d.replace("-", "") for d in _compute_day_obs_iso8601(mjd)])
561-
562-
return day_obs_int
563-
564-
565-
class DayObsStacker(BaseStacker):
566-
"""Add dayObs as, as defined by SITCOMTN-32.
567-
568-
Parameters
569-
----------
570-
mjd_col : `str`
571-
The column with the observatin start MJD.
572-
"""
573-
574-
cols_added = ["dayObs"]
575-
576-
def __init__(self, mjd_col="observationStartMJD"):
577-
self.mjd_col = mjd_col
578-
self.units = ["days"]
579-
self.cols_added_dtypes = [int]
580-
581-
def _run(self, sim_data, cols_present=False):
582-
if cols_present:
583-
# Column already present in data; assume it is correct and does not
584-
# need recalculating.
585-
return sim_data
586-
587-
sim_data[self.cols_added[0]] = _compute_day_obs_int(sim_data[self.mjd_col])
588-
return sim_data
589-
590-
591-
class DayObsMJDStacker(BaseStacker):
592-
"""Add dayObs defined by SITCOMTN-32, as an MJD.
593-
594-
Parameters
595-
----------
596-
mjd_col : `str`
597-
The column with the observatin start MJD.
598-
"""
599-
600-
cols_added = ["day_obs_mjd"]
601-
602-
def __init__(self, mjd_col="observationStartMJD"):
603-
self.mjd_col = mjd_col
604-
self.units = ["days"]
605-
self.cols_added_dtypes = [int]
606-
607-
def _run(self, sim_data, cols_present=False):
608-
if cols_present:
609-
# Column already present in data; assume it is correct and does not
610-
# need recalculating.
611-
return sim_data
612-
613-
sim_data[self.cols_added[0]] = _compute_day_obs_mjd(sim_data[self.mjd_col])
614-
return sim_data
615-
616-
617-
class DayObsISOStacker(BaseStacker):
618-
"""Add dayObs as defined by SITCOMTN-32, in ISO 8601 format.
619-
620-
Parameters
621-
----------
622-
mjd_col : `str`
623-
The column with the observatin start MJD."""
624-
625-
cols_added = ["day_obs_iso8601"]
626-
627-
def __init__(self, mjd_col="observationStartMJD"):
628-
self.mjd_col = mjd_col
629-
self.units = [None]
630-
self.cols_added_dtypes = [(str, 10)]
631-
632-
def _run(self, sim_data, cols_present=False):
633-
if cols_present:
634-
# Column already present in data; assume it is correct and does not
635-
# need recalculating.
636-
return sim_data
637-
638-
sim_data[self.cols_added[0]] = _compute_day_obs_iso8601(sim_data[self.mjd_col])
639-
return sim_data
640-
641-
642510
class OverheadStacker(BaseStacker):
643511
"""Add time between visits in seconds.
644512

0 commit comments

Comments
 (0)