def resetLoop(grabObject='',resetMotorPv=''): "Does UED DAE reset routine." pvscan.printMsg('Starting reset loop') # Open drive laser shutter #shutter1.open.put(1) if shutter2.enabled: pvscan.printMsg('Opening pump shutter') shutter2.open.put(1) # Enable TTL In for HeNe shutter if enabled from PV. if shutter3.enabled: pvscan.printMsg('Enabling TTL In for HeNe shutter') shutter3.ttlInEnable.put(1) pvscan.printSleep(0.5) if grabObject: if grabObject.grabFlag: grabObject.filenameExtras='_' + resetMotorPv.desc + '-' + '{0:08.4f}'.format(resetMotorPv.get()) grabObject.grabImages() # Disable TTL In for HeNe shutter if enabled from PV. if shutter3.enabled: pvscan.printMsg('Disabling TTL In for HeNe shutter') shutter3.ttlInDisable.put(0) # Close pump and HeNe shutters, but only if enabled from PV. if shutter2.enabled: pvscan.printMsg('Closing pump shutter') shutter2.close.put(0) if shutter3.enabled: pvscan.printMsg('Closing HeNe shutter') shutter3.close.put(0) pvscan.printMsg('Reset loop done')
def motorScan(motor1,motor2,motor3,grabObject='',radius=0,resetFlag=0,resetMotorPv=''): "Scans motor1 from start to stop in n steps, moving motors 2 and 3 and doing a reset loop at each step." initialPos1=motor1.get() initialPos2=motor2.get() initialPos3=motor3.get() pvscan.printMsg('Starting motor scan') inc=(motor1.stop-motor1.start)/(motor1.nsteps-1) for i in range(motor1.nsteps): # Move motor 1 newPos0=motor1.start + i*inc newPos1=newPos0 + motor1.offset pvscan.printMsg('Moving %s to %f' % (motor1.pvname,newPos1)) motor1.move(newPos1,timeout=300) # Move motor 2 newPos2=motor2.offset + radius*math.cos(newPos0*math.pi/180) pvscan.printMsg('Moving %s to %f' % (motor2.pvname,newPos2)) motor2.move(newPos2) # Move motor 3 newPos3=motor3.offset + radius*math.sin(newPos0*math.pi/180) pvscan.printMsg('Moving %s to %f' % (motor3.pvname,newPos3)) motor3.move(newPos3) pvscan.printSleep(motor1.settletime,'Settling') # Do reset loop if resetFlag==1 if resetFlag: resetLoop(grabObject,resetMotorPv) # Move motors back to initial positions pvscan.printMsg('Moving %s back to initial position: %f' %(motor1.pvname,initialPos1)) motor1.move(initialPos1) pvscan.printMsg('Moving %s back to initial position: %f' %(motor2.pvname,initialPos2)) motor2.move(initialPos2) pvscan.printMsg('Moving %s back to initial position: %f' %(motor3.pvname,initialPos3)) motor3.move(initialPos3)
def wdmScan(exp, pv1, pv2, pv3, pv4, grabObject=''): if 1 <= exp.scanmode <= 2 and pv2.scanpv and not pv1.scanpv: pv1 = pv2 exp.scanmode = 1 if 1 <= exp.scanmode <= 2 and pv1.scanpv: initialPos1 = pv1.scanpv.get() inc1 = (pv1.scanpv.stop - pv1.scanpv.start) / (pv1.scanpv.nsteps - 1) if zLockFlag: initialPos3 = pv3.scanpv.get() if yLockFlag: initialPos4 = pv4.scanpv.get() if exp.scanmode == 2 and pv2.scanpv: initialPos2 = pv2.scanpv.get() inc2 = (pv2.scanpv.stop - pv2.scanpv.start) / (pv2.scanpv.nsteps - 1) pvscan.printMsg('Scanning %s from %f to %f in %d steps' % (pv1.scanpv.pvname, pv1.scanpv.start, pv1.scanpv.stop, pv1.scanpv.nsteps)) for i in range(pv1.scanpv.nsteps): newPos1 = pv1.scanpv.start + i * inc1 pvscan.printMsg('Setting %s to %f' % (pv1.scanpv.pvname, newPos1)) pv1.scanpv.move(newPos1, delta=delta) if zLockFlag: newPos3 = zSlope * newPos1 + zIntercept pvscan.printMsg('Setting %s to %f' % (pv3.scanpv.pvname, newPos3)) pv3.scanpv.move(newPos3, delta=delta) if yLockFlag: newPos4 = ySlope * newPos1 + yIntercept pvscan.printMsg('Setting %s to %f' % (pv4.scanpv.pvname, newPos4)) pv4.scanpv.move(newPos4, delta=delta) pvscan.printSleep(pv1.scanpv.settletime, 'Settling') if exp.scanmode == 2 and pv2.scanpv: pvscan.printMsg('Scanning %s from %f to %f in %d steps' % (pv2.scanpv.pvname, pv2.scanpv.start, pv2.scanpv.stop, pv2.scanpv.nsteps)) for i in range(pv2.scanpv.nsteps): newPos2 = pv2.scanpv.start + i * inc2 pvscan.printMsg('Setting %s to %f' % (pv2.scanpv.pvname, newPos2)) pv2.scanpv.move(newPos2, delta=delta) pvscan.printSleep(pv2.scanpv.settletime, 'Settling') if grabObject: if grabObject.grabFlag: if grabObject.stepFlag: grabObject.filenameExtras = '_' + pv1.scanpv.desc + '-' + '{0:03d}'.format( i + 1 ) + '-' + '{0:08.4f}'.format( pv1.scanpv.get() ) + '_' + pv2.scanpv.desc + '-' + '{0:03d}'.format( j + 1) + '-' + '{0:08.4f}'.format( pv2.scanpv.get()) else: grabObject.filenameExtras = '_' + pv1.scanpv.desc + '-' + '{0:08.4f}'.format( pv1.scanpv.get() ) + '_' + pv2.scanpv.desc + '-' + '{0:08.4f}'.format( pv2.scanpv.get()) if multiStaticFlag: wdmGrabRoutine2(grabObject.filenameExtras) else: wdmGrabRoutine(grabObject.filenameExtras) else: if grabObject: if grabObject.grabFlag: if grabObject.stepFlag: grabObject.filenameExtras = '_' + pv1.scanpv.desc + '-' + '{0:03d}'.format( i + 1) + '-' + '{0:08.4f}'.format( pv1.scanpv.get()) else: grabObject.filenameExtras = '_' + pv1.scanpv.desc + '-' + '{0:08.4f}'.format( pv1.scanpv.get()) if multiStaticFlag: wdmGrabRoutine2(grabObject.filenameExtras) else: wdmGrabRoutine(grabObject.filenameExtras) # Move back to initial positions pvscan.printMsg('Setting %s back to initial position: %f' % (pv1.scanpv.pvname, initialPos1)) pv1.scanpv.move(initialPos1, delta=delta) if zLockFlag: pvscan.printMsg('Setting %s back to initial position: %f' % (pv3.scanpv.pvname, initialPos3)) pv3.scanpv.move(initialPos3, delta=delta) if yLockFlag: pvscan.printMsg('Setting %s back to initial position: %f' % (pv4.scanpv.pvname, initialPos4)) pv4.scanpv.move(initialPos4, delta=delta) if exp.scanmode == 2 and pv2.scanpv: pvscan.printMsg('Setting %s back to initial position: %f' % (pv2.scanpv.pvname, initialPos2)) pv2.scanpv.move(initialPos2, delta=delta) elif exp.scanmode == 3: # Grab images only if grabObject: if grabObject.grabFlag: grab1.grabImages() grab2.grabImages() elif exp.scanmode == 4: # WDM grab routine only if multiStaticFlag: wdmGrabRoutine2(grabObject.filenameExtras) else: wdmGrabRoutine(grabObject.filenameExtras) else: pvscan.printMsg( 'Scan mode "None" selected or no PVs entered, continuing...') sleep(1)
def wdmScan(exp, pv1, pv2, pv3, pv4, grabObject=""): if 1 <= exp.scanmode <= 2 and pv2.scanpv and not pv1.scanpv: pv1 = pv2 exp.scanmode = 1 if 1 <= exp.scanmode <= 2 and pv1.scanpv: initialPos1 = pv1.scanpv.get() inc1 = (pv1.scanpv.stop - pv1.scanpv.start) / (pv1.scanpv.nsteps - 1) if zLockFlag: initialPos3 = pv3.scanpv.get() if yLockFlag: initialPos4 = pv4.scanpv.get() if exp.scanmode == 2 and pv2.scanpv: initialPos2 = pv2.scanpv.get() inc2 = (pv2.scanpv.stop - pv2.scanpv.start) / (pv2.scanpv.nsteps - 1) pvscan.printMsg( "Scanning %s from %f to %f in %d steps" % (pv1.scanpv.pvname, pv1.scanpv.start, pv1.scanpv.stop, pv1.scanpv.nsteps) ) for i in range(pv1.scanpv.nsteps): newPos1 = pv1.scanpv.start + i * inc1 pvscan.printMsg("Setting %s to %f" % (pv1.scanpv.pvname, newPos1)) pv1.scanpv.move(newPos1, delta=delta) if zLockFlag: newPos3 = zSlope * newPos1 + zIntercept pvscan.printMsg("Setting %s to %f" % (pv3.scanpv.pvname, newPos3)) pv3.scanpv.move(newPos3, delta=delta) if yLockFlag: newPos4 = ySlope * newPos1 + yIntercept pvscan.printMsg("Setting %s to %f" % (pv4.scanpv.pvname, newPos4)) pv4.scanpv.move(newPos4, delta=delta) pvscan.printSleep(pv1.scanpv.settletime, "Settling") if exp.scanmode == 2 and pv2.scanpv: pvscan.printMsg( "Scanning %s from %f to %f in %d steps" % (pv2.scanpv.pvname, pv2.scanpv.start, pv2.scanpv.stop, pv2.scanpv.nsteps) ) for i in range(pv2.scanpv.nsteps): newPos2 = pv2.scanpv.start + i * inc2 pvscan.printMsg("Setting %s to %f" % (pv2.scanpv.pvname, newPos2)) pv2.scanpv.move(newPos2, delta=delta) pvscan.printSleep(pv2.scanpv.settletime, "Settling") if grabObject: if grabObject.grabFlag: if grabObject.stepFlag: grabObject.filenameExtras = ( "_" + pv1.scanpv.desc + "-" + "{0:03d}".format(i + 1) + "-" + "{0:08.4f}".format(pv1.scanpv.get()) + "_" + pv2.scanpv.desc + "-" + "{0:03d}".format(j + 1) + "-" + "{0:08.4f}".format(pv2.scanpv.get()) ) else: grabObject.filenameExtras = ( "_" + pv1.scanpv.desc + "-" + "{0:08.4f}".format(pv1.scanpv.get()) + "_" + pv2.scanpv.desc + "-" + "{0:08.4f}".format(pv2.scanpv.get()) ) if multiStaticFlag: wdmGrabRoutine2(grabObject.filenameExtras) else: wdmGrabRoutine(grabObject.filenameExtras) else: if grabObject: if grabObject.grabFlag: if grabObject.stepFlag: grabObject.filenameExtras = ( "_" + pv1.scanpv.desc + "-" + "{0:03d}".format(i + 1) + "-" + "{0:08.4f}".format(pv1.scanpv.get()) ) else: grabObject.filenameExtras = ( "_" + pv1.scanpv.desc + "-" + "{0:08.4f}".format(pv1.scanpv.get()) ) if multiStaticFlag: wdmGrabRoutine2(grabObject.filenameExtras) else: wdmGrabRoutine(grabObject.filenameExtras) # Move back to initial positions pvscan.printMsg("Setting %s back to initial position: %f" % (pv1.scanpv.pvname, initialPos1)) pv1.scanpv.move(initialPos1, delta=delta) if zLockFlag: pvscan.printMsg("Setting %s back to initial position: %f" % (pv3.scanpv.pvname, initialPos3)) pv3.scanpv.move(initialPos3, delta=delta) if yLockFlag: pvscan.printMsg("Setting %s back to initial position: %f" % (pv4.scanpv.pvname, initialPos4)) pv4.scanpv.move(initialPos4, delta=delta) if exp.scanmode == 2 and pv2.scanpv: pvscan.printMsg("Setting %s back to initial position: %f" % (pv2.scanpv.pvname, initialPos2)) pv2.scanpv.move(initialPos2, delta=delta) elif exp.scanmode == 3: # Grab images only if grabObject: if grabObject.grabFlag: grab1.grabImages() grab2.grabImages() elif exp.scanmode == 4: # WDM grab routine only if multiStaticFlag: wdmGrabRoutine2(grabObject.filenameExtras) else: wdmGrabRoutine(grabObject.filenameExtras) else: pvscan.printMsg('Scan mode "None" selected or no PVs entered, continuing...') sleep(1)