Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
G
geomag-algorithms
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
ghsc
National Geomagnetism Program
geomag-algorithms
Commits
98b0441b
Commit
98b0441b
authored
1 year ago
by
Wernle, Alexandra Nicole
Browse files
Options
Downloads
Patches
Plain Diff
New flag metadata class
parent
cca0f358
No related branches found
No related tags found
1 merge request
!292
New flag metadata class
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
geomagio/metadata/Flag.py
+206
-0
206 additions, 0 deletions
geomagio/metadata/Flag.py
with
206 additions
and
0 deletions
geomagio/metadata/Flag.py
0 → 100644
+
206
−
0
View file @
98b0441b
from
typing
import
Dict
,
Union
,
List
from
datetime
import
timedelta
from
obspy
import
UTCDateTime
from
pydantic
import
BaseModel
,
Field
,
validator
from
enum
import
Enum
# Are channels defined elsewhere?
class
ChannelType
(
str
,
Enum
):
H
=
"
H
"
E
=
"
E
"
X
=
"
X
"
Y
=
"
Y
"
Z
=
"
Z
"
D
=
"
D
"
F
=
"
F
"
class
Flag
(
BaseModel
):
"""
Base class for flagging features in magnetic timeseries data.
Flag example:
```
automatic_flag = Metadata(
created_by=
'
ex_algorithm
'
,
start_time=UTCDateTime(
'
2023-01-01T00:00:00
'
),
end_time=UTCDateTime(
'
2023-01-01T23:59:59
'
),
network=
'
NT
'
,
station=
'
BOU
'
,
channel=
'
BEU
'
,
category=MetadataCategory.FLAG,
comment=
"
spike detected
"
,
priority=1,
data_valid=False,
metadata= Spikes{
"
starttime
"
:
"
2023-01-01T03:05:00
"
,
"
endtime
"
:
"
2023-01-01T03:07:00
"
,
"
channels
"
:
"
F
"
,
"
description
"
:
"
Spike in magnetic field strength
"
,
"
field_work
"
: false,
"
magnitude
"
: 16 nt,
}
)
```
"""
starttime
:
UTCDateTime
=
None
endtime
:
UTCDateTime
=
None
channels
:
Union
[
ChannelType
,
List
[
ChannelType
]]
description
:
str
=
Field
(...,
description
=
"
Description of the flag
"
)
field_work
:
bool
=
Field
(...,
description
=
"
Flag signaling field work
"
)
corrective_action
:
bool
=
Field
(
...,
description
=
"
whether or not corrective action has been taken for spikes, noise, etc.
"
,
)
class
Noise
(
Flag
):
"""
This class is used to flag noise.
Noise can refer to random or unwanted variations in the magnetic field.
Typically it lacks a pattern, has varying amplitudes and frequency distributions.
Noise can be natural or unnatural.
Attributes
----------
noise_level: float
Level of noise in the magnetic time series in decibels.
noise_source: str
Source of the noise.
filtered: bool
Whether the noise has been filtered.
filter_used: str
Type of filter used. This could be linked to another class representing processing tools.
"""
noise_level
:
float
=
Field
(
None
,
description
=
"
Level of noise in the magnetic time series in dB
"
)
noise_source
:
str
=
Field
(
None
,
description
=
"
Source of the noise
"
)
filtered
:
bool
filter_used
:
str
=
Field
(
None
,
description
=
"
Type of filter used
"
)
class
Spikes
(
Flag
):
"""
This class is used to flag spikes.
a spike refers to a sudden, short-duration increase or decrease in the magnetic field.
Spikes are short-lived events and should appear as a single sample within the timeseries.
Attributes
----------
magnitude: float
Magnitude of spike in nt.
"""
magnitude
:
float
# we need to define what this magnitude is relative to
# add validator based on frequency?
class
Gaps
(
Flag
):
"""
This class is used to flag gaps in data.
A gap is a period where data is missing or not recorded.
Attributes
----------
duration: timedelta
Length of time during which data is missing.
cause: str
Cause of gap, e.g., network outage.
handling: str
How the gap is being handled, e.g., backfilled.
"""
duration
:
timedelta
cause
:
str
=
None
handling
:
str
=
None
class
Offsets
(
Flag
):
"""
This class is used to flag offsets.
An offset refers to a relatively constant shift or deviation in the baseline magnetic field
strength lasting for a duration or permanantly like a step.
Attributes
----------
magnitude: float
A constant value added to or subtracted from the magnetic field strength (nt).
duration: timedelta
Length of the offset.
"""
magnitude
:
float
duration
:
timedelta
class
AdjustedAlgorithmOffsets
(
Flag
):
"""
This class is used to flag shifts made by the Adjusted Algorithm.
Attributes
----------
adjustments: Dict
Adjustments made by the algorithm.
"""
adjustments
:
Dict
class
Events
(
Flag
):
"""
This class is used to flag an event of interest such as a geomagnetic storm or earthquake.
Attributes
----------
geomagnetic_storm: bool
Geomagnetic storm period.
"""
geomagnetic_storm
:
bool
=
None
# if true, ignore spike detection filter
class
Anomalies
(
Flag
):
"""
This class is used to flag anything that does not fall under the above categories.
Attributes
----------
"""
# More example usage:
noise_data
=
{
"
starttime
"
:
"
2023-11-16 12:00:00
"
,
"
endtime
"
:
"
2023-11-16 12:15:00
"
,
"
channels
"
:
"
X
"
,
"
metadata
"
:
{
"
key1
"
:
"
value1
"
,
"
key2
"
:
"
value2
"
},
"
description
"
:
"
Noise description
"
,
"
field_work
"
:
True
,
"
noise_level
"
:
0.2
,
}
spikes_data
=
{
"
starttime
"
:
"
2023-11-16 12:00:00
"
,
"
endtime
"
:
"
2023-11-16 12:15:00
"
,
"
channels
"
:
[
"
X
"
,
"
Y
"
,
"
Z
"
],
"
metadata
"
:
{
"
key1
"
:
"
value1
"
,
"
key2
"
:
"
value2
"
},
"
description
"
:
"
Spikes description
"
,
"
field_work
"
:
True
,
"
magnitude
"
:
5.0
,
}
single_channel_instance
=
Noise
(
**
noise_data
)
multiple_channels_instance
=
Spikes
(
**
spikes_data
)
print
(
single_channel_instance
.
dict
())
print
(
multiple_channels_instance
.
dict
())
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment