Example #1
0
    def __init__(self):
        super().__init__()

        # make a text window for terminal output
        self.txt = QTextEdit()
        self.txt.setReadOnly(True)

        # do something with a push button
        self.btn = QPushButton('scan')
        self.btn.clicked.connect(self.run_scan)

        # A sort of Gadget widget - here using pyqt's model/view concept
        self.model = GadgetModel()
        self.tree = QTreeView()
        self.tree.setModel(self.model)
        self.tree.expandAll()
        self.monitor = GadgetMonitor()
        self.monitor.update.connect(self.model.motor_update)
        self.monitor.start()

        # A progress bar for scans
        self.progress = QProgressBar()
        self.progress.setMinimum(0)
        self._last_dt = 0

        self.plot = pg.PlotWidget(parent=self, background='white')

        # layout containing these things
        hbox = QHBoxLayout()
        col1 = QVBoxLayout()
        col2 = QVBoxLayout()
        col1.addWidget(self.tree)
        col1.addWidget(self.txt)
        col1.addWidget(self.btn)
        col1.addWidget(self.progress)
        col2.addWidget(self.plot)
        hbox.addLayout(col1)
        hbox.addLayout(col2)
        self.setLayout(hbox)
        self.resize(1200, 700)

        # redirect stdout
        queue = Queue()
        sys.stdout = StreamWriter(queue)
        self.reader = StreamReader(queue)
        self.reader.signal.connect(self.new_stdout)
        self.reader.start()

        # a special recorder which generates qt signals
        queue = MP_Queue()
        self.qtrec = PyQtRecorder(queue, name='qtrec')
        self.qtrec.start()
        self.emitter = RecorderEmitter(queue)
        self.emitter.new.connect(self.new_data)
        self.emitter.start()

        # a scan runner object we can refer to,
        self.runner = None

        # quote
        contrast.wisdom()
Example #2
0
    h5rec = Hdf5Recorder(name='h5rec')
    h5rec.start()

    # a zmq recorder
    zmqrec = StreamRecorder(name='zmqrec')
    zmqrec.start()

    # this MotorMemorizer keeps track of motor user positions and
    # limits, and dumps this to file when they are changed.
    memorizer = MotorMemorizer(name='memorizer',
                               filepath='/tmp/.dummy_beamline_motors')

    # handy shortcuts
    register_shortcut('wsample', 'wm samx samy')
    register_shortcut('waaa', 'wa')
    register_shortcut('zero_sample', 'umv samx 0 samy 0')

    # define pre- and post-scan actions, per base class
    def pre_scan_stuff(slf):
        print("Maybe open a shutter here?")

    def post_scan_stuff(slf):
        print("Maybe close that shutter again?")

    SoftwareScan._before_scan = pre_scan_stuff
    SoftwareScan._after_scan = post_scan_stuff
    Ct._before_ct = pre_scan_stuff
    Ct._after_ct = post_scan_stuff

    contrast.wisdom()