Source code for mass.core.controller
"""
Contains the class AnalysisControl. It was once intended to control the full
behavior of a lot of analysis operations. In reality, we only use it to specify
the pulse quality cuts.
"""
from .param_dict_base import PrmDictBase
__all__ = ['AnalysisControl', 'standardControl']
[docs]
class AnalysisControl(PrmDictBase):
"""Control the behavior of an analysis operation."""
def __init__(self, **kwargs):
"""Build a set of cuts, plans, and analysis dictionaries with default
values.
"""
super().__init__()
# Not clear what we'll use this for (placeholder).
self.experiment_plan_prm = {}
# Cuts follow certain heuristic rules by default (set to None).
# The cuts parameters.
self.cuts_prm = {
'peak_value': None,
'peak_time_ms': None,
'rise_time_ms': None,
'postpeak_deriv': None,
'pretrigger_rms': None,
'pretrigger_mean': None,
'pulse_average': None,
'min_value': None,
'timestamp_sec': None,
'pretrigger_mean_departure_from_median': None,
'timestamp_diff_sec': None,
'subframecount_diff_sec': None,
'energy': None,
}
# The analysis parameters (not used yet).
self.analysis_prm = {
'pulse_averaging_ranges': None,
}
# The full list of parameters
self._prm_list = [self.cuts_prm, self.analysis_prm, ] # self.experiment_plan_prm]
self._type_check.update({})
# No extra user parameters
self.user_prm = None
self.set(**kwargs)
[docs]
def standardControl():
"""Create a standard set of cuts. Honestly, the is not all that useful, since
cuts can very so hugely!)
"""
ac = AnalysisControl()
ac.set(peak_time_ms=(-0.5, 0.5),
rise_time_ms=(0, 0.2),
postpeak_deriv=(None, 46),
pretrigger_rms=(None, 12),
pretrigger_mean=(None, None),
pretrigger_mean_departure_from_median=(-50, 50),
pulse_average=(0, None),
peak_value=(0, None),
min_value=(-50, None),
)
return ac