diff --git a/pychron/spectrometer/base_magnet.py b/pychron/spectrometer/base_magnet.py index 3638ac677..dcecafc45 100644 --- a/pychron/spectrometer/base_magnet.py +++ b/pychron/spectrometer/base_magnet.py @@ -20,7 +20,7 @@ from math import pi from numpy import arange, sin -from traits.api import Property, Float, Event, Instance +from traits.api import Property, Float, Event, Instance, Bool from pychron.core.yaml import yload from pychron.paths import paths @@ -52,6 +52,9 @@ class BaseMagnet(SpectrometerDevice, FieldMixin): _suppress_mass_update = False + use_beam_blank = Bool(False) + beam_blank_threshold = Float(0.5) + # def __init__(self, *args, **kw): # super(BaseMagnet, self).__init__(*args, **kw) # self._lock = threading.Lock() @@ -86,6 +89,14 @@ def finish_loading(self): # load af demag self._load_af_demag_configuration() + def load_beam_blank(self, config): + pd = "Protection" + self.use_beam_blank = self.config_get( + config, pd, "use_beam_blank", cast="boolean", default=False + ) + self.beam_blank_threshold = self.config_get( + config, pd, "beam_blank_threshold", cast="float", default=0.1 + ) # =============================================================================== # mapping # =============================================================================== diff --git a/pychron/spectrometer/base_spectrometer.py b/pychron/spectrometer/base_spectrometer.py index 7f8cde262..daf0170e0 100644 --- a/pychron/spectrometer/base_spectrometer.py +++ b/pychron/spectrometer/base_spectrometer.py @@ -468,6 +468,8 @@ def load(self): p = get_spectrometer_config_path(name) config = self.get_configuration_writer(p) + self.magnet.load_beam_blank(config) + return config def load_molecular_weights(self): diff --git a/pychron/spectrometer/isotopx/magnet/ngx.py b/pychron/spectrometer/isotopx/magnet/ngx.py index a1a32e22f..aa1dae8ae 100644 --- a/pychron/spectrometer/isotopx/magnet/ngx.py +++ b/pychron/spectrometer/isotopx/magnet/ngx.py @@ -20,13 +20,11 @@ class NGXMagnet(IsotopxMagnet): - _protect_detector = False - def read_dac(self): return self.read_mass() def set_dac(self, v, *args, **kw): - return self.set_mass(v, deflect=self.microcontroller.protect_detector) + return self.set_mass(v, **kw) @get_float() def read_mass(self): @@ -50,12 +48,18 @@ def set_mass(self, v, delay=None, deflect=False): self.microcontroller.stop_acquisition() # self.microcontroller.triggered = False - deflect = ",deflect" if deflect else "" - self.ask("SetMass {},{}{}".format(v, delay, deflect)) dv = abs(self._dac - v) self._dac = v - change = dv > 1e-7 + if self.use_beam_blank: + deflect = dv > self.beam_blank_threshold + + self.debug(f'use beam blank={deflect}. dv={dv}, threshold={self.beam_blank_threshold}') + + deflect = ",deflect" if deflect else "" + self.ask(f"SetMass {v},{delay}{deflect}") + + change = dv > 1e-7 return change diff --git a/pychron/spectrometer/thermo/spectrometer/base.py b/pychron/spectrometer/thermo/spectrometer/base.py index be1321806..755cee27b 100644 --- a/pychron/spectrometer/thermo/spectrometer/base.py +++ b/pychron/spectrometer/thermo/spectrometer/base.py @@ -337,15 +337,9 @@ def load(self): pd = "Protection" if config.has_section(pd): - self.magnet.use_beam_blank = self.config_get( - config, pd, "use_beam_blank", cast="boolean", default=False - ) self.magnet.use_detector_protection = self.config_get( config, pd, "use_detector_protection", cast="boolean", default=False ) - self.magnet.beam_blank_threshold = self.config_get( - config, pd, "beam_blank_threshold", cast="float", default=0.1 - ) # self.magnet.detector_protection_threshold = self.config_get(config, pd, # 'detector_protection_threshold', @@ -369,6 +363,8 @@ def load(self): for d in self.detectors: d.load_deflection_coefficients() + return config + def start(self): self.debug( "********** Spectrometer start. send configuration: {}".format(