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()
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()