def a2scan( motor1, start1, stop1, motor2, start2, stop2, npoints, count_time, * counters, **kwargs): save_flag = kwargs.get("save", True) dm = DataManager() filename = kwargs.get("filename", SCANFILE) logging.getLogger().info( "Scanning %s from %f to %f and %s from %f to %f in %d points" % (motor1.name, start1, stop1, motor2.name, start2, stop2, npoints)) motors = [motor1, motor2] scan = dm.new_scan(filename, motors, npoints, counters, save_flag) start_pos1 = motor1.position() start_pos2 = motor2.position() motor_group = Group(motor1, motor2) def scan_cleanup(): logging.getLogger().info( "Returning motor %s to %f and motor %s to %f" % (motor1.name, start_pos1, motor2.name, start_pos2)) motor_group.move(motor1, start_pos1, motor2, start_pos2) motor_group.move(motor1, start1, motor2, start2) ipoint = 0 countlabellen = len("{0:d}".format(npoints)) countformatstr = "{0:" + "{0:d}".format(countlabellen) + "d}" s1 = numpy.linspace(start1, stop1, npoints) s2 = numpy.linspace(start2, stop2, npoints) with cleanup(scan.end): with error_cleanup(scan_cleanup): for ii in range(npoints): ipoint = ipoint + 1 motor_group.move(motor1, s1[ii], motor2, s2[ii]) acquisitions = [] values = [m.position() for m in (motor1, motor2)] for counter in counters: acquisitions.append(gevent.spawn(counter.read, count_time)) gevent.joinall(acquisitions) values.extend([a.get() for a in acquisitions]) # print values scan.add(values)
def ascan(motor, start, stop, npoints, count_time, *counters, **kwargs): save_flag = kwargs.get("save", True) dm = DataManager() filename = kwargs.get("filename", SCANFILE) logging.getLogger().info("Scanning %s from %f to %f in %d points" % (motor.name, start, stop, npoints)) motors = [motor] scan = dm.new_scan(filename, motors, npoints, counters, save_flag) start_pos = motor.position() def scan_cleanup(): print "Returning motor %s to %f" % (motor.name, start_pos) motor.move(start_pos) motor.move(start) ipoint = 0 countlabellen = len("{0:d}".format(npoints)) countformatstr = "{0:" + "{0:d}".format(countlabellen) + "d}" with cleanup(scan.end): with error_cleanup(scan_cleanup): for position in numpy.linspace(start, stop, npoints): ipoint = ipoint + 1 countlabel = "(" + "{0:3d}".format( ipoint) + "/" + "{0:3d}".format(npoints) + ")" countlabel = "(" + countformatstr.format( ipoint) + "/" + countformatstr.format(npoints) + ")" motor.move(float(position)) acquisitions = [] values = [position] for counter in counters: acquisitions.append(gevent.spawn(counter.read, count_time)) gevent.joinall(acquisitions) values.extend([a.get() for a in acquisitions]) # print values scan.add(values)