mxcubecore 1.393.0__py3-none-any.whl → 1.395.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of mxcubecore might be problematic. Click here for more details.
- mxcubecore/HardwareObjects/ALBA/ALBAAutoProcessing.py +4 -7
- mxcubecore/HardwareObjects/ALBA/ALBABackLight.py +6 -7
- mxcubecore/HardwareObjects/ALBA/ALBABeamInfo.py +2 -4
- mxcubecore/HardwareObjects/ALBA/ALBACats.py +19 -25
- mxcubecore/HardwareObjects/ALBA/ALBAClusterJob.py +10 -11
- mxcubecore/HardwareObjects/ALBA/ALBACollect.py +49 -71
- mxcubecore/HardwareObjects/ALBA/ALBADataAnalysis.py +26 -31
- mxcubecore/HardwareObjects/ALBA/ALBAEnergy.py +1 -5
- mxcubecore/HardwareObjects/ALBA/ALBAEpsActuator.py +1 -1
- mxcubecore/HardwareObjects/ALBA/ALBAFastShutter.py +1 -1
- mxcubecore/HardwareObjects/ALBA/ALBAFlux.py +2 -6
- mxcubecore/HardwareObjects/ALBA/ALBAFrontLight.py +5 -9
- mxcubecore/HardwareObjects/ALBA/ALBAISPyBClient.py +4 -4
- mxcubecore/HardwareObjects/ALBA/ALBAMiniDiff.py +20 -27
- mxcubecore/HardwareObjects/ALBA/ALBAPilatus.py +12 -15
- mxcubecore/HardwareObjects/ALBA/ALBASession.py +1 -4
- mxcubecore/HardwareObjects/ALBA/ALBAZoomMotor.py +10 -14
- mxcubecore/HardwareObjects/ALBA/ALBAZoomMotorAutoBrightness.py +7 -11
- mxcubecore/HardwareObjects/ALBA/XalocMiniDiff.py +7 -8
- mxcubecore/HardwareObjects/BeamInfo.py +4 -6
- mxcubecore/HardwareObjects/Beamline.py +6 -7
- mxcubecore/HardwareObjects/BeamlineActions.py +3 -7
- mxcubecore/HardwareObjects/BlissHutchTrigger.py +2 -4
- mxcubecore/HardwareObjects/BlissMotorWPositions.py +4 -7
- mxcubecore/HardwareObjects/Cats90.py +33 -43
- mxcubecore/HardwareObjects/CatsBessy.py +1 -2
- mxcubecore/HardwareObjects/CatsMaint.py +2 -2
- mxcubecore/HardwareObjects/CentringMath.py +5 -4
- mxcubecore/HardwareObjects/DESY/DigitalZoomMotor.py +3 -5
- mxcubecore/HardwareObjects/DESY/MjpgStreamVideo.py +1 -3
- mxcubecore/HardwareObjects/DESY/P11Collect.py +6 -8
- mxcubecore/HardwareObjects/DESY/P11EDNACharacterisation.py +14 -16
- mxcubecore/HardwareObjects/DESY/P11ISPyBClient.py +6 -10
- mxcubecore/HardwareObjects/DESY/P11NanoDiff.py +5 -5
- mxcubecore/HardwareObjects/DataPublisher.py +2 -3
- mxcubecore/HardwareObjects/EDNACharacterisation.py +2 -4
- mxcubecore/HardwareObjects/EMBL/EMBLBeam.py +3 -3
- mxcubecore/HardwareObjects/EMBL/EMBLBeamCentering.py +2 -4
- mxcubecore/HardwareObjects/EMBL/EMBLBeamFocusing.py +3 -3
- mxcubecore/HardwareObjects/EMBL/EMBLDoorInterlock.py +1 -1
- mxcubecore/HardwareObjects/EMBL/EMBLEnergy.py +10 -18
- mxcubecore/HardwareObjects/EMBL/EMBLEnergyScan.py +9 -13
- mxcubecore/HardwareObjects/EMBL/EMBLFlux.py +10 -12
- mxcubecore/HardwareObjects/EMBL/EMBLMachineInfo.py +2 -2
- mxcubecore/HardwareObjects/EMBL/EMBLMiniDiff.py +18 -18
- mxcubecore/HardwareObjects/EMBL/EMBLMotorsGroup.py +6 -9
- mxcubecore/HardwareObjects/EMBL/EMBLOnlineProcessing.py +6 -6
- mxcubecore/HardwareObjects/EMBL/EMBLPPUControl.py +1 -1
- mxcubecore/HardwareObjects/EMBL/EMBLSSXChip.py +1 -4
- mxcubecore/HardwareObjects/EMBL/EMBLSlitBox.py +1 -3
- mxcubecore/HardwareObjects/EMBL/EMBLTableMotor.py +2 -3
- mxcubecore/HardwareObjects/EMBL/EMBLXRFSpectrum.py +4 -4
- mxcubecore/HardwareObjects/EMBL/EMBLXrayImaging.py +1 -1
- mxcubecore/HardwareObjects/EMBL/TINEMotor.py +2 -4
- mxcubecore/HardwareObjects/EMBLFlexHCD.py +5 -5
- mxcubecore/HardwareObjects/EMBLFlexHarvester.py +2 -2
- mxcubecore/HardwareObjects/ESRF/ESRFBeam.py +3 -5
- mxcubecore/HardwareObjects/ESRF/ESRFBeamInfo.py +1 -5
- mxcubecore/HardwareObjects/ESRF/ESRFBeamlineActions.py +2 -3
- mxcubecore/HardwareObjects/ESRF/ESRFEnergyScan.py +3 -3
- mxcubecore/HardwareObjects/ESRF/ESRFMultiCollect.py +7 -7
- mxcubecore/HardwareObjects/ESRF/ESRFPhotonFlux.py +2 -8
- mxcubecore/HardwareObjects/ESRF/ESRFSC3.py +11 -18
- mxcubecore/HardwareObjects/ESRF/ID29HutchTrigger.py +2 -4
- mxcubecore/HardwareObjects/ESRF/MD2MultiCollect.py +4 -4
- mxcubecore/HardwareObjects/ESRF/SSXICATLIMS.py +9 -6
- mxcubecore/HardwareObjects/EdnaWorkflow.py +9 -11
- mxcubecore/HardwareObjects/Energy.py +11 -15
- mxcubecore/HardwareObjects/ExporterMotor.py +1 -2
- mxcubecore/HardwareObjects/FlexHCD.py +7 -8
- mxcubecore/HardwareObjects/FlexHCDMaintenance.py +1 -2
- mxcubecore/HardwareObjects/GenericDiffractometer.py +26 -46
- mxcubecore/HardwareObjects/Gphl/CollectEmulator.py +6 -7
- mxcubecore/HardwareObjects/Gphl/GphlQueueEntry.py +2 -2
- mxcubecore/HardwareObjects/Gphl/GphlWorkflow.py +29 -43
- mxcubecore/HardwareObjects/Gphl/GphlWorkflowConnection.py +25 -35
- mxcubecore/HardwareObjects/ICATLIMS.py +17 -13
- mxcubecore/HardwareObjects/LNLS/EPICSMotor.py +1 -4
- mxcubecore/HardwareObjects/LNLS/LNLSAperture.py +2 -5
- mxcubecore/HardwareObjects/LNLS/LNLSCamera.py +14 -16
- mxcubecore/HardwareObjects/LNLS/LNLSCollect.py +20 -30
- mxcubecore/HardwareObjects/LNLS/LNLSDetDistMotor.py +7 -11
- mxcubecore/HardwareObjects/LNLS/LNLSEnergy.py +4 -6
- mxcubecore/HardwareObjects/LNLS/LNLSPilatusDet.py +49 -57
- mxcubecore/HardwareObjects/LNLS/LNLSTransmission.py +4 -7
- mxcubecore/HardwareObjects/LdapAuthenticator.py +11 -15
- mxcubecore/HardwareObjects/Lima2Detector.py +1 -1
- mxcubecore/HardwareObjects/LimaEigerDetector.py +1 -1
- mxcubecore/HardwareObjects/LimaPilatusDetector.py +1 -4
- mxcubecore/HardwareObjects/MAXIV/MAXIVAutoProcessing.py +3 -5
- mxcubecore/HardwareObjects/MD3UP.py +1 -2
- mxcubecore/HardwareObjects/MachCurrent.py +5 -5
- mxcubecore/HardwareObjects/Marvin.py +23 -35
- mxcubecore/HardwareObjects/Microdiff.py +6 -8
- mxcubecore/HardwareObjects/MicrodiffActuator.py +1 -1
- mxcubecore/HardwareObjects/MicrodiffBeamstop.py +1 -3
- mxcubecore/HardwareObjects/MicrodiffInOut.py +1 -1
- mxcubecore/HardwareObjects/MicrodiffKappaMotor.py +3 -4
- mxcubecore/HardwareObjects/MiniDiff.py +35 -57
- mxcubecore/HardwareObjects/MotorWPositions.py +3 -3
- mxcubecore/HardwareObjects/PlateManipulator.py +2 -2
- mxcubecore/HardwareObjects/ProposalTypeISPyBLims.py +8 -16
- mxcubecore/HardwareObjects/PyISPyBClient.py +8 -5
- mxcubecore/HardwareObjects/QtGraphicsLib.py +2 -2
- mxcubecore/HardwareObjects/QtGraphicsManager.py +13 -19
- mxcubecore/HardwareObjects/QtInstanceServer.py +27 -55
- mxcubecore/HardwareObjects/QtLimaVideo.py +1 -5
- mxcubecore/HardwareObjects/QueueManager.py +7 -9
- mxcubecore/HardwareObjects/QueueModel.py +6 -8
- mxcubecore/HardwareObjects/RedisClient.py +12 -16
- mxcubecore/HardwareObjects/SC3.py +1 -2
- mxcubecore/HardwareObjects/SOLEIL/PX1/PX1Attenuator.py +1 -3
- mxcubecore/HardwareObjects/SOLEIL/PX1/PX1BeamInfo.py +1 -1
- mxcubecore/HardwareObjects/SOLEIL/PX1/PX1CatsMaint.py +3 -4
- mxcubecore/HardwareObjects/SOLEIL/PX1/PX1Collect.py +11 -11
- mxcubecore/HardwareObjects/SOLEIL/PX1/PX1Cryotong.py +8 -18
- mxcubecore/HardwareObjects/SOLEIL/PX1/PX1Energy.py +6 -7
- mxcubecore/HardwareObjects/SOLEIL/PX1/PX1EnergyScan.py +21 -31
- mxcubecore/HardwareObjects/SOLEIL/PX1/PX1Environment.py +1 -1
- mxcubecore/HardwareObjects/SOLEIL/PX1/PX1MiniDiff.py +11 -21
- mxcubecore/HardwareObjects/SOLEIL/PX1/PX1Pilatus.py +9 -9
- mxcubecore/HardwareObjects/SOLEIL/PX1/PX1Pss.py +1 -2
- mxcubecore/HardwareObjects/SOLEIL/PX1/PX1Resolution.py +1 -5
- mxcubecore/HardwareObjects/SOLEIL/PX1/PX1TangoLight.py +3 -8
- mxcubecore/HardwareObjects/SOLEIL/PX2/PX2Attenuator.py +9 -13
- mxcubecore/HardwareObjects/SOLEIL/PX2/PX2Collect.py +1 -1
- mxcubecore/HardwareObjects/SOLEIL/PX2/PX2Diffractometer.py +22 -22
- mxcubecore/HardwareObjects/SOLEIL/PX2/PX2Energy.py +4 -6
- mxcubecore/HardwareObjects/SOLEIL/PX2/PX2Guillotine.py +2 -2
- mxcubecore/HardwareObjects/SOLEIL/SOLEILCatsMaint.py +6 -8
- mxcubecore/HardwareObjects/SOLEIL/SOLEILEnergyScan.py +44 -56
- mxcubecore/HardwareObjects/SOLEIL/SOLEILGuillotine.py +2 -2
- mxcubecore/HardwareObjects/SOLEIL/SOLEILISPyBClient.py +10 -10
- mxcubecore/HardwareObjects/SOLEIL/SOLEILMachineInfo.py +4 -8
- mxcubecore/HardwareObjects/SOLEIL/SOLEILPss.py +3 -4
- mxcubecore/HardwareObjects/SOLEIL/SOLEILRuche.py +1 -1
- mxcubecore/HardwareObjects/SOLEIL/TangoDCMotor.py +10 -16
- mxcubecore/HardwareObjects/SardanaMotor.py +4 -5
- mxcubecore/HardwareObjects/Session.py +1 -2
- mxcubecore/HardwareObjects/SpecMotorWPositions.py +5 -9
- mxcubecore/HardwareObjects/SpecMotorWSpecPositions.py +2 -4
- mxcubecore/HardwareObjects/SpecShell.py +7 -9
- mxcubecore/HardwareObjects/SpecState.py +5 -7
- mxcubecore/HardwareObjects/StateMachine.py +9 -10
- mxcubecore/HardwareObjects/TangoLimaMpegVideo.py +2 -3
- mxcubecore/HardwareObjects/TangoLimaVideo.py +3 -4
- mxcubecore/HardwareObjects/TangoMachineInfo.py +1 -3
- mxcubecore/HardwareObjects/TangoMotor.py +1 -3
- mxcubecore/HardwareObjects/UserTypeISPyBLims.py +7 -9
- mxcubecore/HardwareObjects/XMLRPCServer.py +20 -22
- mxcubecore/HardwareObjects/abstract/AbstractAperture.py +6 -11
- mxcubecore/HardwareObjects/abstract/AbstractCollect.py +6 -16
- mxcubecore/HardwareObjects/abstract/AbstractDetector.py +2 -7
- mxcubecore/HardwareObjects/abstract/AbstractEnergyScan.py +1 -1
- mxcubecore/HardwareObjects/abstract/AbstractLims.py +3 -4
- mxcubecore/HardwareObjects/abstract/AbstractNState.py +1 -2
- mxcubecore/HardwareObjects/abstract/AbstractProcedure.py +3 -4
- mxcubecore/HardwareObjects/abstract/AbstractSampleChanger.py +1 -1
- mxcubecore/HardwareObjects/abstract/AbstractVideoDevice.py +4 -4
- mxcubecore/HardwareObjects/abstract/AbstractXRFSpectrum.py +1 -1
- mxcubecore/HardwareObjects/abstract/ISPyBAbstractLims.py +11 -13
- mxcubecore/HardwareObjects/mockup/BeamlineTestMockup.py +11 -14
- mxcubecore/HardwareObjects/mockup/EnergyScanMockup.py +10 -11
- mxcubecore/HardwareObjects/mockup/ISPyBClientMockup.py +6 -6
- mxcubecore/HardwareObjects/mockup/ISPyBRestClientMockup.py +1 -1
- mxcubecore/HardwareObjects/mockup/LimaDetectorMockup.py +1 -2
- mxcubecore/HardwareObjects/mockup/MDCameraMockup.py +5 -6
- mxcubecore/HardwareObjects/mockup/MicrodiffInOutMockup.py +1 -1
- mxcubecore/HardwareObjects/mockup/MultiCollectMockup.py +1 -1
- mxcubecore/HardwareObjects/mockup/ShapeHistoryMockup.py +1 -2
- mxcubecore/HardwareObjects/mockup/XRFMockup.py +3 -6
- {mxcubecore-1.393.0.dist-info → mxcubecore-1.395.0.dist-info}/METADATA +1 -1
- {mxcubecore-1.393.0.dist-info → mxcubecore-1.395.0.dist-info}/RECORD +176 -176
- {mxcubecore-1.393.0.dist-info → mxcubecore-1.395.0.dist-info}/COPYING +0 -0
- {mxcubecore-1.393.0.dist-info → mxcubecore-1.395.0.dist-info}/COPYING.LESSER +0 -0
- {mxcubecore-1.393.0.dist-info → mxcubecore-1.395.0.dist-info}/WHEEL +0 -0
|
@@ -33,8 +33,6 @@ NBNB OBSOLETE there is no longer a beamline_setup
|
|
|
33
33
|
</object>
|
|
34
34
|
"""
|
|
35
35
|
|
|
36
|
-
import logging
|
|
37
|
-
|
|
38
36
|
import gevent
|
|
39
37
|
import jsonpickle
|
|
40
38
|
import redis
|
|
@@ -75,12 +73,12 @@ class RedisClient(HardwareObject):
|
|
|
75
73
|
self.active = False
|
|
76
74
|
|
|
77
75
|
if self.active:
|
|
78
|
-
|
|
76
|
+
self.log.info(
|
|
79
77
|
"RedisClient: listening to connections on %s:%d"
|
|
80
78
|
% (self.host, self.port)
|
|
81
79
|
)
|
|
82
80
|
else:
|
|
83
|
-
|
|
81
|
+
self.log.error(
|
|
84
82
|
"RedisClient: Redis server %s:%d is not available"
|
|
85
83
|
% (self.host, self.port)
|
|
86
84
|
)
|
|
@@ -88,7 +86,7 @@ class RedisClient(HardwareObject):
|
|
|
88
86
|
try:
|
|
89
87
|
self.connect(HWR.beamline.flux, "fluxChanged", self.flux_changed)
|
|
90
88
|
except Exception:
|
|
91
|
-
|
|
89
|
+
self.log.exception("")
|
|
92
90
|
|
|
93
91
|
self.proposal_id = HWR.beamline.session.get_proposal()
|
|
94
92
|
self.beamline_name = HWR.beamline.session.beamline_name
|
|
@@ -112,7 +110,7 @@ class RedisClient(HardwareObject):
|
|
|
112
110
|
"mxcube:%s:%s:queue_current" % (self.proposal_id, self.beamline_name),
|
|
113
111
|
queue_list,
|
|
114
112
|
)
|
|
115
|
-
|
|
113
|
+
self.log.debug("RedisClient: Current queue saved")
|
|
116
114
|
|
|
117
115
|
def load_queue(self):
|
|
118
116
|
"""Loads queue from redis DB"""
|
|
@@ -134,13 +132,13 @@ class RedisClient(HardwareObject):
|
|
|
134
132
|
)
|
|
135
133
|
|
|
136
134
|
self.active = True
|
|
137
|
-
|
|
135
|
+
self.log.debug("RedisClient: Queue loaded")
|
|
138
136
|
return selected_model
|
|
139
137
|
|
|
140
138
|
def save_graphics(self):
|
|
141
139
|
"""Saves graphics objects in RedisDB"""
|
|
142
140
|
if self.active:
|
|
143
|
-
|
|
141
|
+
self.log.debug(
|
|
144
142
|
"RedisClient: Graphics saved at "
|
|
145
143
|
+ "mxcube:%s:%s:graphics" % (self.proposal_id, self.beamline_name)
|
|
146
144
|
)
|
|
@@ -160,9 +158,9 @@ class RedisClient(HardwareObject):
|
|
|
160
158
|
HWR.beamline.sample_view.load_shapes(
|
|
161
159
|
jsonpickle.decode(graphics_objects)
|
|
162
160
|
)
|
|
163
|
-
|
|
161
|
+
self.log.debug("RedisClient: Graphics loaded")
|
|
164
162
|
except Exception:
|
|
165
|
-
|
|
163
|
+
self.log.exception("")
|
|
166
164
|
|
|
167
165
|
def save_queue_history_item(self, item):
|
|
168
166
|
"""Saves queue history in redisDB"""
|
|
@@ -171,7 +169,7 @@ class RedisClient(HardwareObject):
|
|
|
171
169
|
"mxcube:%s:%s:queue_history" % (self.proposal_id, self.beamline_name),
|
|
172
170
|
str(item),
|
|
173
171
|
)
|
|
174
|
-
|
|
172
|
+
self.log.debug("RedisClient: History queue saved")
|
|
175
173
|
|
|
176
174
|
def load_queue_history(self):
|
|
177
175
|
"""Loads queue history from redisDB"""
|
|
@@ -187,7 +185,7 @@ class RedisClient(HardwareObject):
|
|
|
187
185
|
for item in items:
|
|
188
186
|
result.append(eval(item))
|
|
189
187
|
except Exception:
|
|
190
|
-
|
|
188
|
+
self.log.exception("")
|
|
191
189
|
return result
|
|
192
190
|
|
|
193
191
|
def clear_db(self):
|
|
@@ -207,14 +205,12 @@ class RedisClient(HardwareObject):
|
|
|
207
205
|
|
|
208
206
|
self.active = True
|
|
209
207
|
except Exception as ex:
|
|
210
|
-
|
|
211
|
-
"Redis: Exception in reading beamline setup: %s" % str(ex)
|
|
212
|
-
)
|
|
208
|
+
self.log.debug("Redis: Exception in reading beamline setup: %s" % str(ex))
|
|
213
209
|
|
|
214
210
|
def save_beamline_setup_item(self, key, value):
|
|
215
211
|
if self.active:
|
|
216
212
|
if key == "flux":
|
|
217
|
-
|
|
213
|
+
self.log.debug("RedisClient: Flux value saved")
|
|
218
214
|
self.redis_client.set(
|
|
219
215
|
"mxcube:%s:%s:flux" % (self.proposal_id, self.beamline_name),
|
|
220
216
|
value[0],
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import logging
|
|
2
1
|
import xml.sax
|
|
3
2
|
from xml.sax.handler import ContentHandler
|
|
4
3
|
|
|
@@ -375,7 +374,7 @@ class SC3(SampleChanger):
|
|
|
375
374
|
Pin.get_sample_address(basket_no, sample_no)
|
|
376
375
|
)
|
|
377
376
|
except Exception:
|
|
378
|
-
|
|
377
|
+
self.log.exception("")
|
|
379
378
|
self._set_selected_component(basket)
|
|
380
379
|
self._set_selected_sample(sample)
|
|
381
380
|
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
|
|
3
1
|
from mxcubecore.BaseHardwareObjects import HardwareObject
|
|
4
2
|
|
|
5
3
|
|
|
@@ -64,7 +62,7 @@ class PX1Attenuator(HardwareObject):
|
|
|
64
62
|
try:
|
|
65
63
|
value = self.get_value()
|
|
66
64
|
except Exception:
|
|
67
|
-
|
|
65
|
+
self.log.error(
|
|
68
66
|
"%s attFactorChanged : received value on channel is not a float value",
|
|
69
67
|
str(self.name()),
|
|
70
68
|
)
|
|
@@ -85,7 +85,7 @@ class PX1BeamInfo(HardwareObject):
|
|
|
85
85
|
self.beam_info_dict["size_x"] = self.beam_size[0] = float(beamx)
|
|
86
86
|
self.beam_info_dict["size_y"] = self.beam_size[1] = float(beamy)
|
|
87
87
|
except Exception:
|
|
88
|
-
|
|
88
|
+
self.log.exception("")
|
|
89
89
|
|
|
90
90
|
def connect_notify(self, signal):
|
|
91
91
|
if signal == "beamInfoChanged":
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import logging
|
|
2
1
|
import time
|
|
3
2
|
|
|
4
3
|
from mxcubecore import HardwareRepository as HWR
|
|
@@ -47,18 +46,18 @@ class PX1CatsMaint(CatsMaint):
|
|
|
47
46
|
|
|
48
47
|
def _do_home_open(self, unload=False):
|
|
49
48
|
if unload and self.loaded:
|
|
50
|
-
|
|
49
|
+
self.log.debug("Unloading sample first")
|
|
51
50
|
self.cats_hwo._do_unload()
|
|
52
51
|
time.sleep(3)
|
|
53
52
|
while HWR.beamline.sample_changer._is_device_busy():
|
|
54
53
|
time.sleep(0.3)
|
|
55
54
|
|
|
56
|
-
|
|
55
|
+
self.log.debug("Running the home command (home/open) now")
|
|
57
56
|
self._cmdHome()
|
|
58
57
|
|
|
59
58
|
def _do_dry_soak(self):
|
|
60
59
|
self._cmdDrySoak()
|
|
61
60
|
|
|
62
61
|
def _do_reset(self):
|
|
63
|
-
|
|
62
|
+
self.log.debug("PX1CatsMaint: executing the _do_reset function")
|
|
64
63
|
self._cmdReset()
|
|
@@ -112,7 +112,7 @@ class PX1Collect(AbstractCollect, HardwareObject):
|
|
|
112
112
|
|
|
113
113
|
collection_type = self.current_dc_parameters["experiment_type"]
|
|
114
114
|
|
|
115
|
-
|
|
115
|
+
self.log.info(
|
|
116
116
|
"PX1Collect: Running PX1 data collection hook. Type is %s" % collection_type
|
|
117
117
|
)
|
|
118
118
|
|
|
@@ -161,7 +161,7 @@ class PX1Collect(AbstractCollect, HardwareObject):
|
|
|
161
161
|
fileinfo = self.current_dc_parameters["fileinfo"]
|
|
162
162
|
basedir = fileinfo["directory"]
|
|
163
163
|
|
|
164
|
-
|
|
164
|
+
self.log.info("PX1Collect: fileinfo is %s " % str(fileinfo))
|
|
165
165
|
imgname = fileinfo["template"] % osc_seq["start_image_number"]
|
|
166
166
|
|
|
167
167
|
# move omega to start angle
|
|
@@ -171,7 +171,7 @@ class PX1Collect(AbstractCollect, HardwareObject):
|
|
|
171
171
|
osc_range = osc_seq["range"]
|
|
172
172
|
exp_time = osc_seq["exposure_time"]
|
|
173
173
|
|
|
174
|
-
|
|
174
|
+
self.log.info(
|
|
175
175
|
"PX1Collect: nb_images: %s / osc_range: %s / exp_time: %s"
|
|
176
176
|
% (nb_images, osc_range, exp_time)
|
|
177
177
|
)
|
|
@@ -354,14 +354,14 @@ class PX1Collect(AbstractCollect, HardwareObject):
|
|
|
354
354
|
#
|
|
355
355
|
# data collection end (or abort)
|
|
356
356
|
#
|
|
357
|
-
|
|
357
|
+
self.log.info("PX1Collect: finishing data collection ")
|
|
358
358
|
HWR.beamline.diffractometer.omega.stop()
|
|
359
359
|
HWR.beamline.fast_shutter.closeShutter()
|
|
360
360
|
|
|
361
361
|
self.emit("progressStop")
|
|
362
362
|
|
|
363
363
|
def data_collection_failed(self):
|
|
364
|
-
|
|
364
|
+
self.log.info(
|
|
365
365
|
"PX1Collect: Data collection failed. recovering sequence should go here"
|
|
366
366
|
)
|
|
367
367
|
|
|
@@ -428,7 +428,7 @@ class PX1Collect(AbstractCollect, HardwareObject):
|
|
|
428
428
|
time.sleep(0.3) # allow time to refresh display after
|
|
429
429
|
|
|
430
430
|
HWR.beamline.sample_view.save_snapshot(filename)
|
|
431
|
-
|
|
431
|
+
self.log.debug("PX1Collect: - snapshot saved to %s" % filename)
|
|
432
432
|
|
|
433
433
|
def generate_thumbnails(self, filename, jpeg_filename, thumbnail_filename):
|
|
434
434
|
#
|
|
@@ -489,10 +489,10 @@ class PX1Collect(AbstractCollect, HardwareObject):
|
|
|
489
489
|
except Exception:
|
|
490
490
|
import traceback
|
|
491
491
|
|
|
492
|
-
|
|
492
|
+
self.log.error(
|
|
493
493
|
"PX1Collect: Error changing permissions for PROCESS directory"
|
|
494
494
|
)
|
|
495
|
-
|
|
495
|
+
self.log.error(traceback.format_exc())
|
|
496
496
|
|
|
497
497
|
self.create_goimg_file(process_dir)
|
|
498
498
|
|
|
@@ -616,7 +616,7 @@ class PX1Collect(AbstractCollect, HardwareObject):
|
|
|
616
616
|
if not self.is_collect_phase():
|
|
617
617
|
success = self.go_to_collect()
|
|
618
618
|
if not success:
|
|
619
|
-
|
|
619
|
+
self.log.info("PX1Collect: Cannot set COLLECT phase")
|
|
620
620
|
return False
|
|
621
621
|
return True
|
|
622
622
|
|
|
@@ -744,7 +744,7 @@ class PX1Collect(AbstractCollect, HardwareObject):
|
|
|
744
744
|
if env_state != "RUNNING" and self.is_collect_phase():
|
|
745
745
|
break
|
|
746
746
|
if time.time() - t0 > timeout:
|
|
747
|
-
|
|
747
|
+
self.log.debug(
|
|
748
748
|
"PX1Collect: timeout sending supervisor to collect phase"
|
|
749
749
|
)
|
|
750
750
|
break
|
|
@@ -766,7 +766,7 @@ class PX1Collect(AbstractCollect, HardwareObject):
|
|
|
766
766
|
if env_state != "RUNNING" and self.is_sampleview_phase():
|
|
767
767
|
break
|
|
768
768
|
if time.time() - t0 > timeout:
|
|
769
|
-
|
|
769
|
+
self.log.debug(
|
|
770
770
|
"PX1Collect: timeout sending supervisor to sample view phase"
|
|
771
771
|
)
|
|
772
772
|
break
|
|
@@ -103,8 +103,8 @@ class PX1Cryotong(Cats90):
|
|
|
103
103
|
try:
|
|
104
104
|
self._cmdAckSampleMemory()
|
|
105
105
|
except Exception:
|
|
106
|
-
"""
|
|
107
|
-
|
|
106
|
+
"""do nothing if cmd not to acknowledge not in xml"""
|
|
107
|
+
self.log.exception("")
|
|
108
108
|
self.incoherent_state = value
|
|
109
109
|
|
|
110
110
|
def _dry_and_soak_needed(self, value=None):
|
|
@@ -125,9 +125,7 @@ class PX1Cryotong(Cats90):
|
|
|
125
125
|
value = self._chnCountDown.get_value()
|
|
126
126
|
|
|
127
127
|
if value != self.count_down:
|
|
128
|
-
|
|
129
|
-
"PX1Cats. CountDown changed. Now is: %s" % value
|
|
130
|
-
)
|
|
128
|
+
self.log.info("PX1Cats. CountDown changed. Now is: %s" % value)
|
|
131
129
|
self.count_down = value
|
|
132
130
|
self.emit("countdownSignal", value)
|
|
133
131
|
|
|
@@ -254,9 +252,7 @@ class PX1Cryotong(Cats90):
|
|
|
254
252
|
while not self._chnPowered.get_value():
|
|
255
253
|
gevent.sleep(0.3)
|
|
256
254
|
if time.time() - t0 > timeout:
|
|
257
|
-
|
|
258
|
-
"CRYOTONG: timeout waiting for power on"
|
|
259
|
-
)
|
|
255
|
+
self.log.warning("CRYOTONG: timeout waiting for power on")
|
|
260
256
|
break
|
|
261
257
|
|
|
262
258
|
if self._chnPowered.get_value():
|
|
@@ -275,9 +271,7 @@ class PX1Cryotong(Cats90):
|
|
|
275
271
|
wait_n = 0
|
|
276
272
|
while self._is_device_busy():
|
|
277
273
|
if wait_n % 10 == 3:
|
|
278
|
-
|
|
279
|
-
"CRYOTONG: waiting for dry and soak to complete"
|
|
280
|
-
)
|
|
274
|
+
self.log.warning("CRYOTONG: waiting for dry and soak to complete")
|
|
281
275
|
gevent.sleep(0.3)
|
|
282
276
|
wait_n += 1
|
|
283
277
|
|
|
@@ -300,18 +294,14 @@ class PX1Cryotong(Cats90):
|
|
|
300
294
|
while not self.environment.readyForTransfer():
|
|
301
295
|
gevent.sleep(0.3)
|
|
302
296
|
if time.time() - t0 > timeout:
|
|
303
|
-
|
|
304
|
-
"CRYOTONG: timeout waiting for transfer phase"
|
|
305
|
-
)
|
|
297
|
+
self.log.warning("CRYOTONG: timeout waiting for transfer phase")
|
|
306
298
|
break
|
|
307
|
-
|
|
308
|
-
"CRYOTONG: waiting for transfer phase to be set"
|
|
309
|
-
)
|
|
299
|
+
self.log.warning("CRYOTONG: waiting for transfer phase to be set")
|
|
310
300
|
|
|
311
301
|
if not self.environment.readyForTransfer():
|
|
312
302
|
return False
|
|
313
303
|
|
|
314
|
-
|
|
304
|
+
self.log.warning("CRYOTONG: ready for transfer now")
|
|
315
305
|
return True
|
|
316
306
|
|
|
317
307
|
# ## (END) OVERLOADED CATS90 methods ####
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
# from qt import *
|
|
2
2
|
|
|
3
|
-
import logging
|
|
4
3
|
import time
|
|
5
4
|
|
|
6
5
|
from mxcubecore.Command.Tango import DeviceProxy
|
|
@@ -50,13 +49,13 @@ class PX1Energy(Device, AbstractEnergy):
|
|
|
50
49
|
|
|
51
50
|
def connect_notify(self, signal):
|
|
52
51
|
if signal == "energyChanged":
|
|
53
|
-
|
|
52
|
+
self.log.debug(
|
|
54
53
|
"PX1Energy. connect_notify. sending energy value %s" % self.get_value()
|
|
55
54
|
)
|
|
56
55
|
self.energyChanged(self.get_energy())
|
|
57
56
|
|
|
58
57
|
if signal == "stateChanged":
|
|
59
|
-
|
|
58
|
+
self.log.debug(
|
|
60
59
|
"PX1Energy. connect_notify. sending state value %s" % self.get_state()
|
|
61
60
|
)
|
|
62
61
|
self.stateChanged(self.get_state())
|
|
@@ -179,7 +178,7 @@ class PX1Energy(Device, AbstractEnergy):
|
|
|
179
178
|
self.und_device.gap = newgap + backlash
|
|
180
179
|
time.sleep(1)
|
|
181
180
|
except Exception:
|
|
182
|
-
|
|
181
|
+
self.log.error(
|
|
183
182
|
"%s: Cannot move undulator U20 : State device = %s",
|
|
184
183
|
self.id,
|
|
185
184
|
str(self.und_device.State()),
|
|
@@ -189,14 +188,14 @@ class PX1Energy(Device, AbstractEnergy):
|
|
|
189
188
|
self.energy_chan.set_value(value)
|
|
190
189
|
return value
|
|
191
190
|
except Exception:
|
|
192
|
-
|
|
191
|
+
self.log.error(
|
|
193
192
|
"%s: Cannot move Energy : State device = %s",
|
|
194
193
|
self.id,
|
|
195
194
|
self.get_state(),
|
|
196
195
|
)
|
|
197
196
|
|
|
198
197
|
else:
|
|
199
|
-
|
|
198
|
+
self.log.error(
|
|
200
199
|
"%s: Cannot move Energy : State device = %s",
|
|
201
200
|
self.id,
|
|
202
201
|
self.get_state(),
|
|
@@ -204,7 +203,7 @@ class PX1Energy(Device, AbstractEnergy):
|
|
|
204
203
|
|
|
205
204
|
def set_wavelength(self, value, wait=False):
|
|
206
205
|
egy_value = self.lambda_to_energy(float(value))
|
|
207
|
-
|
|
206
|
+
self.log.debug(
|
|
208
207
|
"%s: Moving wavelength to : %s (egy to %s" % (self.id, value, egy_value)
|
|
209
208
|
)
|
|
210
209
|
self.set_valuey(egy_value)
|
|
@@ -58,7 +58,7 @@ class PX1EnergyScan(AbstractEnergyScan, Equipment):
|
|
|
58
58
|
self.scan_info = {}
|
|
59
59
|
self.scan_data = []
|
|
60
60
|
|
|
61
|
-
self.log =
|
|
61
|
+
self.log = self.log
|
|
62
62
|
|
|
63
63
|
def init(self):
|
|
64
64
|
self.ready_event = gevent.event.Event()
|
|
@@ -268,7 +268,7 @@ class PX1EnergyScan(AbstractEnergyScan, Equipment):
|
|
|
268
268
|
def start_energy_scan(
|
|
269
269
|
self, element, edge, directory, prefix, session_id=None, blsample_id=None
|
|
270
270
|
):
|
|
271
|
-
log =
|
|
271
|
+
log = self.log
|
|
272
272
|
|
|
273
273
|
self.scan_info = {
|
|
274
274
|
"sessionId": session_id,
|
|
@@ -315,7 +315,7 @@ class PX1EnergyScan(AbstractEnergyScan, Equipment):
|
|
|
315
315
|
except Exception:
|
|
316
316
|
import traceback
|
|
317
317
|
|
|
318
|
-
|
|
318
|
+
self.log.error(
|
|
319
319
|
"EnergyScan: problem starting energy scan. %s" % traceback.format_exc()
|
|
320
320
|
)
|
|
321
321
|
self.scanCommandFailed()
|
|
@@ -379,7 +379,7 @@ class PX1EnergyScan(AbstractEnergyScan, Equipment):
|
|
|
379
379
|
self.ready_event.set()
|
|
380
380
|
|
|
381
381
|
def scanCommandFinished(self, *args):
|
|
382
|
-
|
|
382
|
+
self.log.debug("EnergyScan: finished")
|
|
383
383
|
|
|
384
384
|
with cleanup(self.ready_event.set):
|
|
385
385
|
self.scan_info["endTime"] = time.strftime("%Y-%m-%d %H:%M:%S")
|
|
@@ -425,17 +425,13 @@ class PX1EnergyScan(AbstractEnergyScan, Equipment):
|
|
|
425
425
|
if not os.path.exists(archive_directory):
|
|
426
426
|
os.makedirs(archive_directory)
|
|
427
427
|
except Exception:
|
|
428
|
-
|
|
429
|
-
"PX1EnergyScan: could not create results directory."
|
|
430
|
-
)
|
|
428
|
+
self.log.exception("PX1EnergyScan: could not create results directory.")
|
|
431
429
|
self.store_energy_scan()
|
|
432
430
|
self.scanCommandFailed()
|
|
433
431
|
return
|
|
434
432
|
|
|
435
433
|
if not self.save_raw(scan_file_raw_filename, archive_file_raw_filename):
|
|
436
|
-
|
|
437
|
-
"PX1EnergyScan: could not save data raw file"
|
|
438
|
-
)
|
|
434
|
+
self.log.exception("PX1EnergyScan: could not save data raw file")
|
|
439
435
|
self.store_energy_scan()
|
|
440
436
|
self.scanCommandFailed()
|
|
441
437
|
return
|
|
@@ -490,9 +486,7 @@ class PX1EnergyScan(AbstractEnergyScan, Equipment):
|
|
|
490
486
|
) = result_data
|
|
491
487
|
else:
|
|
492
488
|
self.store_energy_scan()
|
|
493
|
-
|
|
494
|
-
"Energy scan: Chooch cannot parse results"
|
|
495
|
-
)
|
|
489
|
+
self.log.error("Energy scan: Chooch cannot parse results")
|
|
496
490
|
return
|
|
497
491
|
# scan_data = self.get_scan_data()
|
|
498
492
|
# self.log.debug("running chooch with values: element=%s, element=%s" % (elt,edge))
|
|
@@ -507,7 +501,7 @@ class PX1EnergyScan(AbstractEnergyScan, Equipment):
|
|
|
507
501
|
|
|
508
502
|
self.log.debug(traceback.format_exc())
|
|
509
503
|
self.store_energy_scan()
|
|
510
|
-
|
|
504
|
+
self.log.error("Energy scan: Chooch failed")
|
|
511
505
|
return
|
|
512
506
|
|
|
513
507
|
self.log.info("EnergyScan. running chooch done")
|
|
@@ -524,7 +518,7 @@ class PX1EnergyScan(AbstractEnergyScan, Equipment):
|
|
|
524
518
|
|
|
525
519
|
self.thEdge = self.e_edge
|
|
526
520
|
|
|
527
|
-
|
|
521
|
+
self.log.info(
|
|
528
522
|
"th. Edge %s ; chooch results are pk=%f, ip=%f, rm=%f"
|
|
529
523
|
% (self.thEdge, pk, ip, rm)
|
|
530
524
|
)
|
|
@@ -541,20 +535,20 @@ class PX1EnergyScan(AbstractEnergyScan, Equipment):
|
|
|
541
535
|
ip = 0
|
|
542
536
|
rm = self.thEdge + 0.03
|
|
543
537
|
|
|
544
|
-
|
|
538
|
+
self.log.warning(
|
|
545
539
|
"EnergyScan: calculated peak is %s theoretical value more than 20eV"
|
|
546
540
|
% side
|
|
547
541
|
)
|
|
548
|
-
|
|
549
|
-
|
|
542
|
+
self.log.warning(" calculated = %s" % savpk)
|
|
543
|
+
self.log.warning(" theoretical = %s" % self.thEdge)
|
|
550
544
|
|
|
551
545
|
if not self.copy_efs(scan_file_efs_filename, archive_file_efs_filename):
|
|
552
|
-
|
|
546
|
+
self.log.warning(" copy efs failed ")
|
|
553
547
|
self.store_energy_scan()
|
|
554
548
|
self.scanCommandFailed()
|
|
555
549
|
return
|
|
556
550
|
|
|
557
|
-
|
|
551
|
+
self.log.warning(
|
|
558
552
|
" efs file has been archived at %s" % archive_file_efs_filename
|
|
559
553
|
)
|
|
560
554
|
|
|
@@ -574,16 +568,14 @@ class PX1EnergyScan(AbstractEnergyScan, Equipment):
|
|
|
574
568
|
self.scan_info["filename"] = archive_file_raw_filename
|
|
575
569
|
# self.scan_info["workingDirectory"] = archive_directory
|
|
576
570
|
|
|
577
|
-
|
|
578
|
-
" generating graph data from %s" % str(chooch_graph_data)
|
|
579
|
-
)
|
|
571
|
+
self.log.warning(" generating graph data from %s" % str(chooch_graph_data))
|
|
580
572
|
|
|
581
573
|
chooch_graph_x, chooch_graph_y1, chooch_graph_y2 = zip(*chooch_graph_data)
|
|
582
574
|
chooch_graph_x = list(chooch_graph_x)
|
|
583
575
|
for i in range(len(chooch_graph_x)):
|
|
584
576
|
chooch_graph_x[i] = chooch_graph_x[i] / 1000.0
|
|
585
577
|
|
|
586
|
-
|
|
578
|
+
self.log.info("PX1EnergScan. Saving png")
|
|
587
579
|
|
|
588
580
|
# prepare to save png files
|
|
589
581
|
title = "%10s %6s %6s\n%10s %6.2f %6.2f\n%10s %6.2f %6.2f" % (
|
|
@@ -620,21 +612,21 @@ class PX1EnergyScan(AbstractEnergyScan, Equipment):
|
|
|
620
612
|
self.scan_info["jpegChoochFileFullPath"] = str(escan_ispyb_path)
|
|
621
613
|
|
|
622
614
|
try:
|
|
623
|
-
|
|
615
|
+
self.log.info(
|
|
624
616
|
"Rendering energy scan and Chooch graphs to PNG file : %s",
|
|
625
617
|
scan_file_png_filename,
|
|
626
618
|
)
|
|
627
619
|
canvas.print_figure(scan_file_png_filename, dpi=80)
|
|
628
620
|
except Exception:
|
|
629
|
-
|
|
621
|
+
self.log.exception("could not print figure")
|
|
630
622
|
try:
|
|
631
|
-
|
|
623
|
+
self.log.info(
|
|
632
624
|
"Rendering energy scan and Chooch graphs to PNG file : %s",
|
|
633
625
|
archive_file_png_filename,
|
|
634
626
|
)
|
|
635
627
|
canvas.print_figure(archive_file_png_filename, dpi=80)
|
|
636
628
|
except Exception:
|
|
637
|
-
|
|
629
|
+
self.log.exception("could not save figure")
|
|
638
630
|
|
|
639
631
|
self.store_energy_scan()
|
|
640
632
|
|
|
@@ -680,9 +672,7 @@ class PX1EnergyScan(AbstractEnergyScan, Equipment):
|
|
|
680
672
|
self.log.info("EnergyScan. saving data in %s" % scan_filename)
|
|
681
673
|
self.log.info("EnergyScan. archiving data in %s" % archive_filename)
|
|
682
674
|
except Exception:
|
|
683
|
-
|
|
684
|
-
"EMBLEnergyScan: could not create results raw file"
|
|
685
|
-
)
|
|
675
|
+
self.log.exception("EMBLEnergyScan: could not create results raw file")
|
|
686
676
|
return False
|
|
687
677
|
|
|
688
678
|
scan_data = self.get_scan_data()
|
|
@@ -296,7 +296,7 @@ class PX1Environment(HardwareObject):
|
|
|
296
296
|
def setAuthorizationFlag(self, value):
|
|
297
297
|
# make here the logic with eventually other permits (like hardware permit)
|
|
298
298
|
if value != self.auth:
|
|
299
|
-
|
|
299
|
+
self.log.debug(
|
|
300
300
|
"PX1Environment. received authorization from cryotong: %s" % value
|
|
301
301
|
)
|
|
302
302
|
self.auth = value
|
|
@@ -54,16 +54,14 @@ class PX1MiniDiff(GenericDiffractometer):
|
|
|
54
54
|
if env_state != "RUNNING" and self.px1env_ho.isPhaseVisuSample():
|
|
55
55
|
break
|
|
56
56
|
if time.time() - t0 > timeout:
|
|
57
|
-
|
|
58
|
-
"timeout sending supervisor to sample view phase"
|
|
59
|
-
)
|
|
57
|
+
self.log.debug("timeout sending supervisor to sample view phase")
|
|
60
58
|
break
|
|
61
59
|
gevent.sleep(0.1)
|
|
62
60
|
|
|
63
61
|
self.lightarm_hwobj.adjustLightLevel()
|
|
64
62
|
|
|
65
63
|
def smargon_state_changed(self, value):
|
|
66
|
-
|
|
64
|
+
self.log.debug("smargon state changed")
|
|
67
65
|
self.smargon_state = value
|
|
68
66
|
self.emit("minidiffStateChanged", (value,))
|
|
69
67
|
|
|
@@ -106,7 +104,7 @@ class PX1MiniDiff(GenericDiffractometer):
|
|
|
106
104
|
def px1_manual_centring(self, sample_info=None, wait_result=None):
|
|
107
105
|
""" """
|
|
108
106
|
self.emit_progress_message("Manual 3 click centring...")
|
|
109
|
-
|
|
107
|
+
self.log.debug(
|
|
110
108
|
" starting manual 3 click centring. phiy is %s" % str(self.centring_phiy)
|
|
111
109
|
)
|
|
112
110
|
|
|
@@ -137,7 +135,7 @@ class PX1MiniDiff(GenericDiffractometer):
|
|
|
137
135
|
"""
|
|
138
136
|
Descript. :
|
|
139
137
|
"""
|
|
140
|
-
|
|
138
|
+
self.log.debug("Diffractometer: centring procedure done.")
|
|
141
139
|
try:
|
|
142
140
|
motor_pos = centring_procedure.get()
|
|
143
141
|
if isinstance(motor_pos, gevent.GreenletExit):
|
|
@@ -146,15 +144,11 @@ class PX1MiniDiff(GenericDiffractometer):
|
|
|
146
144
|
logging.exception("Could not complete centring")
|
|
147
145
|
self.emit_centring_failed()
|
|
148
146
|
else:
|
|
149
|
-
|
|
150
|
-
"Diffractometer: centring procedure done. %s" % motor_pos
|
|
151
|
-
)
|
|
147
|
+
self.log.debug("Diffractometer: centring procedure done. %s" % motor_pos)
|
|
152
148
|
|
|
153
149
|
for motor in motor_pos:
|
|
154
150
|
position = motor_pos[motor]
|
|
155
|
-
|
|
156
|
-
" - motor is %s - going to %s" % (motor.id, position)
|
|
157
|
-
)
|
|
151
|
+
self.log.debug(" - motor is %s - going to %s" % (motor.id, position))
|
|
158
152
|
|
|
159
153
|
self.emit_progress_message("Moving sample to centred position...")
|
|
160
154
|
self.emit_centring_moving()
|
|
@@ -213,12 +207,10 @@ class PX1MiniDiff(GenericDiffractometer):
|
|
|
213
207
|
# We do not want to modify the input dict
|
|
214
208
|
motor_positions_copy = motor_positions.copy()
|
|
215
209
|
|
|
216
|
-
|
|
217
|
-
"MiniDiff moving motors. %s" % str(motor_positions_copy)
|
|
218
|
-
)
|
|
210
|
+
self.log.debug("MiniDiff moving motors. %s" % str(motor_positions_copy))
|
|
219
211
|
|
|
220
212
|
self.wait_device_ready(timeout)
|
|
221
|
-
|
|
213
|
+
self.log.debug(" now ready to move them")
|
|
222
214
|
for motor in motor_positions_copy.keys():
|
|
223
215
|
position = motor_positions_copy[motor]
|
|
224
216
|
if type(motor) in (str, unicode):
|
|
@@ -229,19 +221,17 @@ class PX1MiniDiff(GenericDiffractometer):
|
|
|
229
221
|
continue
|
|
230
222
|
motor_positions_copy[motor] = position
|
|
231
223
|
|
|
232
|
-
|
|
233
|
-
" / moving motor. %s to %s" % (motor.id, position)
|
|
234
|
-
)
|
|
224
|
+
self.log.debug(" / moving motor. %s to %s" % (motor.id, position))
|
|
235
225
|
self.wait_device_ready(timeout)
|
|
236
226
|
try:
|
|
237
227
|
motor.set_value(position, timeout=None)
|
|
238
228
|
except Exception:
|
|
239
229
|
import traceback
|
|
240
230
|
|
|
241
|
-
|
|
231
|
+
self.log.debug(
|
|
242
232
|
" / error moving motor on diffractometer. state is %s"
|
|
243
233
|
% (self.smargon_state)
|
|
244
234
|
)
|
|
245
|
-
|
|
235
|
+
self.log.debug(" / %s " % traceback.format_exc())
|
|
246
236
|
|
|
247
237
|
self.wait_device_ready(timeout)
|