diff --git a/ophyd_devices/epics/devices/SpmBase.py b/ophyd_devices/epics/devices/SpmBase.py index 502d3c1..3c94f24 100644 --- a/ophyd_devices/epics/devices/SpmBase.py +++ b/ophyd_devices/epics/devices/SpmBase.py @@ -58,7 +58,7 @@ class SpmSim(SpmBase): # Define normalized 2D gaussian def gaus2d(x=0, y=0, mx=0, my=0, sx=1, sy=1): return np.exp( - -((x - mx) ** 2.0 / (2.0 * sx**2.0) + (y - my) ** 2.0 / (2.0 * sy**2.0)) + -((x - mx) ** 2.0 / (2.0 * sx ** 2.0) + (y - my) ** 2.0 / (2.0 * sy ** 2.0)) ) # Generator for dynamic values @@ -74,10 +74,10 @@ class SpmSim(SpmBase): beam = self._simFrame() total = np.sum(beam) - np.sum(beam[24:48, :]) rnge = np.floor(np.log10(total) - 0.0) - s1 = np.sum(beam[0:16, :]) / 10**rnge - s2 = np.sum(beam[16:24, :]) / 10**rnge - s3 = np.sum(beam[40:48, :]) / 10**rnge - s4 = np.sum(beam[48:64, :]) / 10**rnge + s1 = np.sum(beam[0:16, :]) / 10 ** rnge + s2 = np.sum(beam[16:24, :]) / 10 ** rnge + s3 = np.sum(beam[40:48, :]) / 10 ** rnge + s4 = np.sum(beam[48:64, :]) / 10 ** rnge self.s1w.set(s1).wait() self.s2w.set(s2).wait() diff --git a/ophyd_devices/epics/devices/XbpmBase.py b/ophyd_devices/epics/devices/XbpmBase.py index 1cc540b..1cc8ca3 100644 --- a/ophyd_devices/epics/devices/XbpmBase.py +++ b/ophyd_devices/epics/devices/XbpmBase.py @@ -88,7 +88,7 @@ class XbpmSim(XbpmBase): # define normalized 2D gaussian def gaus2d(x=0, y=0, mx=0, my=0, sx=1, sy=1): return np.exp( - -((x - mx) ** 2.0 / (2.0 * sx**2.0) + (y - my) ** 2.0 / (2.0 * sy**2.0)) + -((x - mx) ** 2.0 / (2.0 * sx ** 2.0) + (y - my) ** 2.0 / (2.0 * sy ** 2.0)) ) # Generator for dynamic values @@ -104,10 +104,10 @@ class XbpmSim(XbpmBase): beam = self._simFrame() total = np.sum(beam) rnge = np.floor(np.log10(total) - 0.0) - s1 = np.sum(beam[32:64, 32:64]) / 10**rnge - s2 = np.sum(beam[0:32, 32:64]) / 10**rnge - s3 = np.sum(beam[32:64, 0:32]) / 10**rnge - s4 = np.sum(beam[0:32, 0:32]) / 10**rnge + s1 = np.sum(beam[32:64, 32:64]) / 10 ** rnge + s2 = np.sum(beam[0:32, 32:64]) / 10 ** rnge + s3 = np.sum(beam[32:64, 0:32]) / 10 ** rnge + s4 = np.sum(beam[0:32, 0:32]) / 10 ** rnge self.s1w.set(s1).wait() self.s2w.set(s2).wait() diff --git a/ophyd_devices/epics/devices/__init__.py b/ophyd_devices/epics/devices/__init__.py index d3c347b..f1a0cac 100644 --- a/ophyd_devices/epics/devices/__init__.py +++ b/ophyd_devices/epics/devices/__init__.py @@ -3,7 +3,18 @@ from .slits import SlitH, SlitV from .XbpmBase import XbpmBase, XbpmCsaxsOp from .SpmBase import SpmBase from .InsertionDevice import InsertionDevice -from .specMotors import PmMonoBender, PmDetectorRotation, GirderMotorX1, GirderMotorY1, GirderMotorROLL, GirderMotorYAW, GirderMotorPITCH, MonoTheta1, MonoTheta2, EnergyKev +from .specMotors import ( + PmMonoBender, + PmDetectorRotation, + GirderMotorX1, + GirderMotorY1, + GirderMotorROLL, + GirderMotorYAW, + GirderMotorPITCH, + MonoTheta1, + MonoTheta2, + EnergyKev, +) # Standard ophyd classes diff --git a/ophyd_devices/epics/devices/cSaxsVirtualMotors.py b/ophyd_devices/epics/devices/cSaxsVirtualMotors.py index b87825b..94d3b96 100644 --- a/ophyd_devices/epics/devices/cSaxsVirtualMotors.py +++ b/ophyd_devices/epics/devices/cSaxsVirtualMotors.py @@ -1,5 +1,3 @@ - - TABLES_DT_PUSH_DIST_MM = 890 @@ -21,8 +19,12 @@ class DetectorTableTheta(PseudoPositioner): @pseudo_position_argument def forward(self, pseudo_pos): - return self.RealPosition(pusher = tan(pseudo_pos.theta * 3.141592 / 180.0) * TABLES_DT_PUSH_DIST_MM) + return self.RealPosition( + pusher=tan(pseudo_pos.theta * 3.141592 / 180.0) * TABLES_DT_PUSH_DIST_MM + ) @real_position_argument - def inverse(self, real_pos): - return self.PseudoPosition(theta = -180 * atan(real_pos.pusher / TABLES_DT_PUSH_DIST_MM) / 3.141592) + def inverse(self, real_pos): + return self.PseudoPosition( + theta=-180 * atan(real_pos.pusher / TABLES_DT_PUSH_DIST_MM) / 3.141592 + ) diff --git a/ophyd_devices/epics/devices/specMotors.py b/ophyd_devices/epics/devices/specMotors.py index 34b8c7a..66e9987 100644 --- a/ophyd_devices/epics/devices/specMotors.py +++ b/ophyd_devices/epics/devices/specMotors.py @@ -97,34 +97,43 @@ class PmDetectorRotation(PseudoPositioner): class GirderMotorX1(PVPositioner): """Girder X translation pseudo motor """ + setpoint = Component(EpicsSignal, ":X_SET", name="sp") readback = Component(EpicsSignalRO, ":X1", name="rbv") done = Component(EpicsSignal, ":M-DMOV", name="dmov") + class GirderMotorY1(PVPositioner): """Girder Y translation pseudo motor """ + setpoint = Component(EpicsSignal, ":Y_SET", name="sp") readback = Component(EpicsSignalRO, ":Y1", name="rbv") done = Component(EpicsSignal, ":M-DMOV", name="dmov") + class GirderMotorYAW(PVPositioner): """Girder YAW pseudo motor """ + setpoint = Component(EpicsSignal, ":YAW_SET", name="sp") readback = Component(EpicsSignalRO, ":YAW1", name="rbv") done = Component(EpicsSignal, ":M-DMOV", name="dmov") + class GirderMotorROLL(PVPositioner): """Girder ROLL pseudo motor """ + setpoint = Component(EpicsSignal, ":ROLL_SET", name="sp") readback = Component(EpicsSignalRO, ":ROLL1", name="rbv") done = Component(EpicsSignal, ":M-DMOV", name="dmov") + class GirderMotorPITCH(PVPositioner): """Girder YAW pseudo motor """ + setpoint = Component(EpicsSignal, ":PITCH_SET", name="sp") readback = Component(EpicsSignalRO, ":PITCH1", name="rbv") done = Component(EpicsSignal, ":M-DMOV", name="dmov") @@ -134,6 +143,7 @@ class VirtualEpicsSignalRO(EpicsSignalRO): """This is a test class to create derives signals from one or multiple original signals... """ + def calc(self, val): return val @@ -141,27 +151,34 @@ class VirtualEpicsSignalRO(EpicsSignalRO): raw = super().get(*args, **kwargs) return self.calc(raw) - #def describe(self): + # def describe(self): # val = self.get() # d = super().describe() # d[self.name]["dtype"] = data_type(val) # return d + class MonoTheta1(VirtualEpicsSignalRO): """Converts the pusher motor position to theta angle """ + _mono_a0_enc_scale1 = -1.0 _mono_a1_lever_length1 = 206.706 _mono_a2_pusher_offs1 = 6.85858 _mono_a3_enc_offs1 = -16.9731 + def calc(self, val): asin_arg = (val - self._mono_a2_pusher_offs1) / self._mono_a1_lever_length1 - theta1 = self._mono_a0_enc_scale1 * asin( asin_arg ) / 3.141592 * 180.0 + self._mono_a3_enc_offs1 + theta1 = ( + self._mono_a0_enc_scale1 * asin(asin_arg) / 3.141592 * 180.0 + self._mono_a3_enc_offs1 + ) return theta1 + class MonoTheta2(VirtualEpicsSignalRO): """Converts the pusher motor position to theta angle """ + _mono_a3_enc_offs2 = -19.7072 _mono_a2_pusher_offs2 = 5.93905 _mono_a1_lever_length2 = 206.572 @@ -169,37 +186,27 @@ class MonoTheta2(VirtualEpicsSignalRO): def calc(self, val): asin_arg = (val - self._mono_a2_pusher_offs2) / self._mono_a1_lever_length2 - theta2 = self._mono_a0_enc_scale2 * asin( asin_arg ) / 3.141592 * 180.0 + self._mono_a3_enc_offs2 + theta2 = ( + self._mono_a0_enc_scale2 * asin(asin_arg) / 3.141592 * 180.0 + self._mono_a3_enc_offs2 + ) return theta2 + class EnergyKev(VirtualEpicsSignalRO): """Converts the pusher motor position to energy in keV """ + _mono_a3_enc_offs2 = -19.7072 _mono_a2_pusher_offs2 = 5.93905 _mono_a1_lever_length2 = 206.572 _mono_a0_enc_scale2 = -1.0 _mono_hce = 12.39852066 - _mono_2d2 = 2*5.43102/sqrt(3) + _mono_2d2 = 2 * 5.43102 / sqrt(3) + def calc(self, val): asin_arg = (val - self._mono_a2_pusher_offs2) / self._mono_a1_lever_length2 - theta2_deg = self._mono_a0_enc_scale2 * asin( asin_arg ) / 3.141592 * 180.0 + self._mono_a3_enc_offs2 - E_keV = -self._mono_hce / self._mono_2d2 / sin(theta2_deg/180.0*3.14152) + theta2_deg = ( + self._mono_a0_enc_scale2 * asin(asin_arg) / 3.141592 * 180.0 + self._mono_a3_enc_offs2 + ) + E_keV = -self._mono_hce / self._mono_2d2 / sin(theta2_deg / 180.0 * 3.14152) return E_keV - - - - - - - - - - - - - - - - -