Source code for pychron.spectrometer.base_detector

# ===============================================================================
# Copyright 2016 Jake Ross
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ===============================================================================

# ============= standard library imports ========================
from numpy import array, hstack

# ============= enthought library imports =======================
from traits.api import HasTraits, Str, Int, Bool, Float, Property, Color, Array


# ============= local library imports  ==========================


[docs]class BaseDetector(HasTraits): name = Str kind = Str serial_id = Str intensity = Str std = Str intensities = Array nstd = Int(10) active = Bool(True) gain = Float software_gain = Float(1.0) color = Color series_id = Int isotope = Str mass = Float isotopes = Property index = Float ypadding = Str def set_intensity(self, v): if v is not None: n = self.nstd if self.intensities is None: self.intensities = array([]) self.intensities = hstack((self.intensities[-n:], [v])) self.std = "{:0.5f}".format(self.intensities.std()) self.intensity = "{:0.5f}".format(v) @property def gain_outdated(self): return abs(self.get_gain() - self.gain) < 1e-7 def get_gain(self): v = self._read_gain() try: v = float(v) except (TypeError, ValueError): v = 1 self.gain = v return v def set_gain(self): self._set_gain() def get_deflection_correction(self, *args, **kw): return 0 def toyaml(self): attrs = ( "name", "index", "software_gain", "serial_id", "relative_position", "use_deflection", "protection_threshold", "deflection_correction_sign", "deflection_name", "active", "isotope", "kind", "ypadding", ) yd = {attr: getattr(self, attr) for attr in attrs} color = self.color yd["color"] = int("0x{:02X}{:02X}{:02X}".format(*color.getRgb()), 16) return yd # private def _set_gain(self): raise NotImplementedError def _read_gain(self): raise NotImplementedError def _get_isotopes(self): molweights = self.spectrometer.molecular_weights return sorted(molweights.keys()) # return sorted(molweights.keys(), key=lambda x: int(x[2:])) def __repr__(self): return "Detector({})".format(self.name)
# ============= EOF =============================================