forked from IMAP-Science-Operations-Center/imap_processing
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathquality_flags.py
More file actions
173 lines (122 loc) · 4.35 KB
/
quality_flags.py
File metadata and controls
173 lines (122 loc) · 4.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
"""Bitwise flagging."""
from enum import IntFlag
class FlagNameMixin(IntFlag):
"""Modifies flags for Python versions < 3.11."""
@property
def name(self) -> str:
"""
Override the default name property to handle combined flags.
Returns
-------
combined_name : str
The combined name of the individual flags.
"""
if self._name_ is not None:
return self._name_
members = [member for member in self.__class__ if member & self == member]
return "|".join(str(m).split(".", 1)[-1] for m in members if m != 0x0)
class CommonFlags(FlagNameMixin):
"""Common quality flags."""
NONE = 0x0
INF = 2**0 # bit 0, Infinite value
NEG = 2**1 # bit 1, Negative value
class ENAFlags(FlagNameMixin):
"""Common ENA flags."""
BADSPIN = 2**2 # bit 2, Bad spin
class ImapDEOutliersUltraFlags(FlagNameMixin):
"""IMAP Ultra flags."""
NONE = CommonFlags.NONE
FOV = 2**0 # bit 0
PHCORR = 2**1 # bit 1
COINPH = 2**2 # bit 2 # Event validity
INVALID_ENERGY = 2**3 # bit 3
DURINGREPOINT = 2**4 # bit 4 # event during a repointing
BACKTOF = 2**5 # bit 5 # Back TOF outlier
class ImapHkUltraFlags(FlagNameMixin):
"""IMAP Ultra flags."""
NONE = CommonFlags.NONE
INF = CommonFlags.INF # bit 0
NEG = CommonFlags.NEG # bit 1
BADSPIN = ENAFlags.BADSPIN # bit 2
FLAG1 = 2**3 # bit 3
class ImapAttitudeUltraFlags(FlagNameMixin):
"""IMAP Ultra flags."""
NONE = CommonFlags.NONE
SPINRATE = 2**0 # bit 0
AUXMISMATCH = 2**1 # bit 1 # aux packet does not match Universal Spin Table
SPINPHASE = 2**2 # bit 2 # spin phase flagged by Universal Spin Table
SPINPERIOD = 2**3 # bit 3 # spin period flagged by Universal Spin Table
class ImapRatesUltraFlags(FlagNameMixin):
"""IMAP Ultra Rates flags."""
NONE = CommonFlags.NONE
HIGHRATES = 2**0 # bit 0
FIRSTSPIN = 2**1 # bit 1
LASTSPIN = 2**2 # bit 2
PARTIALSPIN = 2**2 # bit 2
class ImapDEScatteringUltraFlags(FlagNameMixin):
"""IMAP Ultra Scattering flags."""
NONE = CommonFlags.NONE
ABOVE_THRESHOLD = 2**0 # bit 0
NAN_PHI_OR_THETA = 2**1 # bit 1
class ImapPSETUltraFlags(FlagNameMixin):
"""IMAP Ultra Rates flags."""
NONE = CommonFlags.NONE
EARTH_FOV = 2**0 # bit 0
class ImapInstrumentUltraFlags(FlagNameMixin):
"""IMAP Ultra flags using other instruments."""
NONE = CommonFlags.NONE
class ImapLoFlags(FlagNameMixin):
"""IMAP Lo flags."""
NONE = CommonFlags.NONE
INF = CommonFlags.INF # bit 0
NEG = CommonFlags.NEG # bit 1
BADSPIN = ENAFlags.BADSPIN # bit 2
FLAG2 = 2**3 # bit 3
class HitFlags(
FlagNameMixin,
):
"""Hit flags."""
NONE = CommonFlags.NONE
INF = CommonFlags.INF # bit 0
NEG = CommonFlags.NEG # bit 1
FLAG3 = 2**2 # bit 2
class SWAPIFlags(
FlagNameMixin,
):
"""SWAPI flags."""
NONE = CommonFlags.NONE
INF = CommonFlags.INF # bit 0
NEG = CommonFlags.NEG # bit 1
SWP_PCEM_COMP = 2**2 # bit 2
SWP_SCEM_COMP = 2**3 # bit 3
SWP_COIN_COMP = 2**4 # bit 4
OVR_T_ST = 2**5 # bit 5
UND_T_ST = 2**6 # bit 6
PCEM_CNT_ST = 2**7 # bit 7
SCEM_CNT_ST = 2**8 # bit 8
PCEM_V_ST = 2**9 # bit 9
PCEM_I_ST = 2**10 # bit 10
PCEM_INT_ST = 2**11 # bit 11
SCEM_V_ST = 2**12 # bit 12
SCEM_I_ST = 2**13 # bit 13
SCEM_INT_ST = 2**14 # bit 14
class GLOWSL1bFlags(FlagNameMixin):
"""Glows L1b flags."""
NONE = CommonFlags.NONE
IS_CLOSE_TO_UV_SOURCE = 2**0 # Is the bin close to a UV source.
IS_INSIDE_EXCLUDED_REGION = 2**1 # Is the bin inside an excluded sky region.
IS_EXCLUDED_BY_INSTR_TEAM = 2**2 # Is the bin excluded by the instrument team.
IS_SUSPECTED_TRANSIENT = 2**3 # Is the bin a suspected transient.
class SweL1bFlags(FlagNameMixin):
"""SWE L1b flags."""
NONE = CommonFlags.NONE
INF = CommonFlags.INF
NEG = CommonFlags.NEG
LAST_CAL_INTERVAL = (
2**2
) # bit 2, counter values extrapolated using last two cal entries
class ImapHiL1bDeFlags(FlagNameMixin):
"""IMAP Hi L1B Direct Event CCSDS packet quality flags."""
NONE = CommonFlags.NONE
PACKET_FULL = 2**0 # bit 0, packet contained 664 events (max capacity)
BADSPIN = ENAFlags.BADSPIN # bit 2, packet contained events from an invalid spin