plugins.transient_plugin
index
/Users/anthony/Development/opq/mauka/plugins/transient_plugin.py

This plugin detects, classifies, and stores transient incidents.
Transient are classified using the IEEE 1159 standard

 
Modules
       
config
constants
mongo
multiprocessing
numpy
scipy.optimize
plugins
protobuf
scipy.signal
scipy.stats

 
Classes
       
plugins.base_plugin.MaukaPlugin(builtins.object)
TransientPlugin

 
class TransientPlugin(plugins.base_plugin.MaukaPlugin)
    TransientPlugin(conf: config.MaukaConfig, exit_event: <bound method BaseContext.Event of <multiprocessing.context.DefaultContext object at 0x102421be0>>)
 
Mauka plugin that detects and classifies transients in accordance to the IEEE 1159 standard.
 
 
Method resolution order:
TransientPlugin
plugins.base_plugin.MaukaPlugin
builtins.object

Methods defined here:
__init__(self, conf: config.MaukaConfig, exit_event: <bound method BaseContext.Event of <multiprocessing.context.DefaultContext object at 0x102421be0>>)
Initializes this plugin
:param conf: Mauka configuration
:param exit_event: Exit event that can disable this plugin from parent process
on_message(self, topic, mauka_message)
Called async when a topic this plugin subscribes to produces a message
:param topic: The topic that is producing the message
:param mauka_message: The message that was produced

Data and other attributes defined here:
NAME = 'TransientPlugin'

Methods inherited from plugins.base_plugin.MaukaPlugin:
debug(self, msg: str)
Prints a debug message using this classes logger and formatted the plugin name.
:param msg: Message to print to debug.
get_mongo_client(self)
Returns an OPQ mongo client
 
:return: An OPQ mongo client
get_status(self) -> str
Return the status of this plugin
:return: The status of this plugin
handle_self_message(self, message: str)
Handles a self-message
 
:param message: The message to handle
is_self_message(self, topic: str) -> bool
Determines if this is a message directed at this plugin. I.e. the topic is the name of the plugin.
 
:param topic: Topic of the message
:return: If this is a self message or not
produce(self, topic: str, mauka_message: mauka_pb2.MaukaMessage)
Produces a message with a given topic to the system
 
:param topic: The topic to produce this message to
:param mauka_message: The message to produce
run_plugin(self)
This is the run loop for this plugin process
start_heartbeat(self)
This is a recursive function that acts as a heartbeat.
 
This function calls itself over-and-over on a timer to produce heartbeat messages. The interval can be
configured is the configuration file.

Data descriptors inherited from plugins.base_plugin.MaukaPlugin:
__dict__
dictionary for instance variables (if defined)
__weakref__
list of weak references to the object (if defined)

 
Functions
       
arcing_classifier(filtered_waveform: numpy.ndarray, configs: dict) -> (<class 'bool'>, <class 'dict'>)
Identifies whether the transient is arcing and, if so, calculates additional meta data for the transient, such as
the number of zero crossings in the transient waveform
:param filtered_waveform: The transient waveform, that is the sampled waveform without the fundamental frequency
included
:param configs: Includes the necessary parameters needed to classify the transient
:return: A tuple which has contains a boolean indicator of whether the transient was indeed classified as being
arcing and then a dictionary of the calculated meta data.
find_zero_xings(waveform: numpy.ndarray) -> numpy.ndarray
Function which returns a boolean array indicating the positions of zero crossings in the the waveform
:param waveform:
:return: a boolean array indicating the positions of zero crossings in the the waveform
impulsive_classifier(filtered_waveform: numpy.ndarray, configs: dict) -> (<class 'bool'>, <class 'dict'>)
Identifies whether the transient is impulsive and, if so, calculates additional meta data for the transient, such as
the magnitude, duration, and rise/fall and fall/rise times.
:param filtered_waveform: The transient waveform, that is the sampled waveform without the fundamental frequency
included
:param configs: Includes the necessary parameters needed to classify the transient
:return: A tuple which has contains a boolean indicator of whether the transient was indeed classified as being
impulsive and then a dictionary of the calculated meta data.
multiple_zero_xing_classifier(waveforms: dict, configs: dict) -> (<class 'bool'>, <class 'dict'>)
Identifies whether the transient causes multiple zero crossings and, if so, calculates additional meta data for the
transient, such as the additional number of zero crossings caused by the transient
:param waveforms: The raw, fundamental, and filtered waveform
:param configs: Includes the necessary parameters needed to classify the transient
:return: A tuple which has contains a boolean indicator of whether the transient was indeed classified as being
a multiple zero crossing transient, and then a dictionary of the calculated metadata.
noise_canceler(voltage, noise_floor)
Cancels waveform measurements below noise floor. This method is intended to be used in a vectorized fashion.
:param voltage: The voltage measurement
:param noise_floor: The noise floor
:return: voltage above noise floor.
oscillatory_classifier(filtered_waveform: numpy.ndarray, configs: dict) -> (<class 'bool'>, <class 'dict'>)
Identifies whether the transient is oscillatory and, if so, further classifies the transient as a medium, low, or
high frequency oscillatory transient and calculates additional meta data for the transient such as the magnitude,
duration, and spectral content.
:param filtered_waveform: The transient waveform, that is the sampled waveform without the fundamental frequency
included
:return: A tuple which has contains a boolean indicator of whether the transient was indeed classified as being
oscillatory and then a dictionary of the calculated meta data.
periodic_notching_classifier(filtered_waveform: numpy.ndarray, fundamental_waveform: numpy.ndarray, configs: dict) -> (<class 'bool'>, <class 'dict'>)
Identifies whether the transient is periodic notching and, if so, calculates additional meta data for the transient,
such as the amplitude, width, period, and time.
:param filtered_waveform: The transient waveform, that is the sampled waveform without the fundamental frequency
included
:param fundamental_waveform: The fundamental waveform of the signal during the transient window, used to determine
whether the notching is negative power or not.
:param configs: Includes the necessary parameters needed to classify the transient
:return: A tuple which has contains a boolean indicator of whether the transient was indeed classified as being
periodic notching and then a dictionary of the calculated meta data.
transient_incident_classifier(event_id: int, box_id: str, raw_waveform: numpy.ndarray, box_event_start_ts: int, configs: dict, opq_mongo_client: mongo.OpqMongoClient = None, logger=None)
Classifies transient waveform. Creates a Mongo Incident document
:param event_id:
:param box_id:
:param raw_waveform:
:param box_event_start_ts:
:param configs:
:param opq_mongo_client:
:param logger:
:return: list of the classified incidents
transient_sliding_window(filtered_waveform: numpy.ndarray, noise_floor: float, max_lull_ms: float) -> list
Function to find candidate transient window start and stop indices
:param filtered_waveform:
:param noise_floor:
:param max_lull_ms:
:return:
waveform_filter(raw_waveform: numpy.ndarray, filter_order: int, transient_cutoff_frequency: float) -> dict
Function to filter out the fundamental waveform to retrieve the potential transient waveform
:param raw_waveform: The raw sampled voltages
:param filter_order: The order of the low pass Butterworth filter
:param transient_cutoff_frequency: The cutoff frequency of the low pass Butterworth filter.
:return: The filtered waveform, that is the waveform without the fundamental frequency component