Script execution
This commit is contained in:
@@ -24,20 +24,18 @@ class Pixel(DeviceBase, Readable):
|
||||
self.PIX_THRESH1 = 40
|
||||
self.PIX_THRESH2 = 500
|
||||
self.PIX_THRESH3 = 8000
|
||||
self.PIX_THRESH4 = 100000
|
||||
|
||||
self.PIX_THRESH4 = 100000
|
||||
self.PIX_EXP_START_TIME = 0
|
||||
self._update_header_length()
|
||||
|
||||
|
||||
self.show()
|
||||
|
||||
|
||||
def _update_header_length():
|
||||
format = self_get_image_format(self)
|
||||
def _update_header_length(self):
|
||||
format = self.get_image_format()
|
||||
ext = format.split('.')[-1]
|
||||
if (ext == "tif"):
|
||||
if ext == "tif":
|
||||
self.IMAGE_HEADER_LENGTH = 4096
|
||||
else if (ext == "edf"):
|
||||
elif ext == "edf":
|
||||
self.IMAGE_HEADER_LENGTH = 1024
|
||||
else:
|
||||
self.IMAGE_HEADER_LENGTH = 0
|
||||
@@ -53,6 +51,7 @@ class Pixel(DeviceBase, Readable):
|
||||
|
||||
def set_image_format(self, fmt):
|
||||
caput(self.prefix + ":FNAM_FMT", fmt)
|
||||
self._update_header_length();
|
||||
|
||||
def get_count_id(self):
|
||||
return caget (self.prefix + ":FNUM", 'i')
|
||||
@@ -67,9 +66,27 @@ class Pixel(DeviceBase, Readable):
|
||||
val = max(float(val), 0.000005)
|
||||
caput (self.prefix + ":EXPOSE", val * 1000)
|
||||
|
||||
def get_status(self):
|
||||
return caget (self.prefix + ":STATUS")
|
||||
def get_status(self):
|
||||
ret = caget (self.prefix + ":STATUS", 's')
|
||||
if ret in ["Ready0", "Ready1"]:
|
||||
setState(State.Ready)
|
||||
elif ret in ["Snapping", "Writing", "Updating"]:
|
||||
setState(State.Busy)
|
||||
elif ret in ["Error"]:
|
||||
setState(State.Error)
|
||||
elif ret in ["Time-out", "Disconnected"]:
|
||||
setState(State.Offline)
|
||||
elif ret in ["Undefined","Connected",]:
|
||||
setState(State.Invalid)
|
||||
else:
|
||||
setState(State.Invalid)
|
||||
return ret
|
||||
|
||||
def is_status_ready(self, status=None):
|
||||
if status is None:
|
||||
status = self.get_status()
|
||||
return status in ["Ready0", "Ready1"]
|
||||
|
||||
def set_path(self, patha, pathb=""):
|
||||
caput(self.prefix + ":PATHa", patha)
|
||||
caput(self.prefix + ":PATHb", pathb)
|
||||
@@ -83,76 +100,62 @@ class Pixel(DeviceBase, Readable):
|
||||
return caget (self.prefix + ":TRIG")
|
||||
|
||||
|
||||
def get_trigger_id(self):
|
||||
return caget (self.prefix + ":TRIG", 'i')
|
||||
|
||||
def pixsnap(self):
|
||||
pixwait() # Wait until pixel detector is ready
|
||||
PIX_EXPOSE = epics_get(PIX_EXPOSE_CHN)
|
||||
slef.set_trigger ("Inc+Sn+Wr")
|
||||
self.PIX_EXP_START_TIME = time.time()
|
||||
|
||||
|
||||
def pixwait():
|
||||
cnt = 0
|
||||
def pixwait(self):
|
||||
cnt = 0
|
||||
expose = self.get_expose()
|
||||
#
|
||||
# First wait for "TRIG" to go back to idle. This should
|
||||
# ensure that execution of the command has started.
|
||||
#
|
||||
trig = epics_get (PIX_TRIG_CHN, "long")
|
||||
while (trig != 0) {
|
||||
cnt = cnt + 1
|
||||
if (cnt > 1000) {
|
||||
printf("Triger signal still busy, pixwait timed-out!\n")
|
||||
exit
|
||||
}
|
||||
sleep (0.05)
|
||||
trig = epics_get (PIX_TRIG_CHN, "long")
|
||||
}
|
||||
while (get_trigger_id() != 0):
|
||||
cnt = cnt + 1
|
||||
if (cnt > 1000):
|
||||
raise Exception("Trigger signal still busy, pixwait timed-out!\n")
|
||||
time.sleep (0.05)
|
||||
|
||||
#
|
||||
# Then wait for exposure time to elapse.
|
||||
# (PIX_EXPOSE is in milliseconds!)
|
||||
#
|
||||
while (time() <= PIX_EXP_START_TIME+(PIX_EXPOSE/1000)){
|
||||
sleep(0.05)
|
||||
}
|
||||
while time.time() <= self.PIX_EXP_START_TIME + (expose * 1000) :
|
||||
time.sleep(0.05)
|
||||
|
||||
#
|
||||
# Then wait for the pixel detector to become ready.
|
||||
# Wait time is 1000 x 0.05 sec = 50 sec.
|
||||
#
|
||||
smsFlag = 0
|
||||
stat = epics_get (PIX_STATUS_CHN, "string")
|
||||
while ((stat != "Ready0") && (stat != "Ready1")) {
|
||||
cnt = cnt + 1
|
||||
if (cnt > 1000) {
|
||||
printf("%s %s", "pixwait: Pixel status did not return to \"Ready\" within 50", \\
|
||||
"seconds.\n")
|
||||
beep; beep; beep; beep; beep;
|
||||
if (smsFlag == 0) {
|
||||
smsSendMessage ("Pixel detector problem in pixwait.")
|
||||
}
|
||||
smsFlag = 1
|
||||
printf ("\n")
|
||||
secs=15
|
||||
while (secs > 0) {
|
||||
printf ("\r\aHit any keyboard character within %3d secs to abort.", secs)
|
||||
sleep (1.0)
|
||||
_9 = input (-1)
|
||||
if (length (_9) > 0) {
|
||||
beep; printf ("\nAborted.\n")
|
||||
exit
|
||||
}
|
||||
secs--
|
||||
}
|
||||
printf ("Trying for another 50 secs\n")
|
||||
}
|
||||
if ((stat == "Undefined") || \
|
||||
(stat == "Time-out") || \
|
||||
(stat == "Error")) {
|
||||
print "\aInvalid PIX status:", stat
|
||||
exit
|
||||
}
|
||||
sleep (0.05)
|
||||
stat = epics_get (PIX_STATUS_CHN, "string")
|
||||
}
|
||||
if (smsFlag == 1) {
|
||||
smsSendMessage ("Pixel detector seems to have recovered from error.")
|
||||
}
|
||||
|
||||
sms_flag = 0
|
||||
while (True):
|
||||
stat = self.get_status()
|
||||
if is_status_ready(stat):
|
||||
break
|
||||
cnt = cnt + 1
|
||||
if cnt > 1000 :
|
||||
if (smsFlag == 0):
|
||||
print("pixwait: Pixel status did not return to 'Ready' within 50 seconds.")
|
||||
notify ("Pixel detector problem in pixwait.")
|
||||
sms_flag = 1
|
||||
|
||||
if stat in ("Undefined", "Time-out", "Error"):
|
||||
raise Exception ("Invalid PIX status:", stat)
|
||||
time.sleep (0.05)
|
||||
|
||||
|
||||
if sms_flag == 1:
|
||||
notify ("Pixel detector seems to have recovered from error.")
|
||||
|
||||
|
||||
|
||||
def show(self):
|
||||
print ("\nThe current pixel detector settings are:\n")
|
||||
@@ -175,11 +178,11 @@ class Pixel(DeviceBase, Readable):
|
||||
printf(" Threshold values: Thresh1 = %d, Thresh2 = %d, Thresh3 = %d, Thresh4 = %d\n" % (PIX_THRESH1,PIX_THRESH2,PIX_THRESH3,PIX_THRESH4))
|
||||
|
||||
def doUpdate(self):
|
||||
pass
|
||||
self.get_status()
|
||||
|
||||
def read(self):
|
||||
return None
|
||||
|
||||
add_device( Pixel("pixel", "X04SA-ES3-CCD"), True)
|
||||
#mythen.polling = 1000
|
||||
pixel.polling = 1000
|
||||
pixel.update()
|
||||
|
||||
Reference in New Issue
Block a user