# -*- coding: utf-8 -*- """ RUN information dialog @author: Felix Jaeckel <*****@*****.**> """ from LabWidgets.Utilities import compileUi compileUi('RunUi') import RunUi as Ui from PyQt4.QtGui import QDialog, QFileDialog from PyQt4.QtCore import QSettings, QString # pyqtSignal, QThread, import os class RunDialog(Ui.Ui_Dialog, QDialog): def __init__(self, parent=None): super(RunDialog, self).__init__(parent) self.setupUi(self) self.setWindowTitle('ADR3 run info') self.selectPb.clicked.connect(self.selectBasePath) self.buttonBox.accepted.connect(self.saveSettings) self.runLe.textChanged.connect(self.updatePath) self.restoreSettings() def selectBasePath(self): newPath = QFileDialog.getExistingDirectory( parent=self, caption='Select the base directory for the runs.', directory=self.basePath) if newPath: self.basePath = newPath
Based on IvCurveDaq code @author: Felix Jaeckel <*****@*****.**> Version history: 0.51 Housekeeping logger added (2018-03-27) """ from __future__ import division, print_function OrganizationName = 'McCammon Astrophysics' OrganizationDomain = 'wisp.physics.wisc.edu' ApplicationName = 'SineSweepDaq' Version = '0.51' from LabWidgets.Utilities import compileUi, saveWidgetToSettings, restoreWidgetFromSettings compileUi('SineSweepDaqUi') import SineSweepDaqUi as ui from PyQt4.QtGui import QWidget, QMessageBox, qApp from PyQt4.QtCore import QThread, QSettings, pyqtSignal, QObject, pyqtSlot import DAQ.PyDaqMx as daq import time import numpy as np #import scipy.signal as signal import pyqtgraph as pg pg.setConfigOption('background', 'w') pg.setConfigOption('foreground', 'k') import traceback import gc import warnings
logging.basicConfig(level=logging.WARN, format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s', datefmt='%m-%d %H:%M:%S', filename='MagnetControl.log', filemode='w') console = logging.StreamHandler() console.setLevel(logging.WARN) formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s') console.setFormatter(formatter) logging.getLogger('').addHandler(console) logger = logging.getLogger(__name__) from MagnetSupply2 import MagnetControlThread from MagnetSupply import MagnetControlRequestReplyThread from PyQt4.QtGui import QWidget from PyQt4.QtCore import pyqtSignal, QObject, QSettings, QByteArray from LabWidgets.Utilities import compileUi compileUi('MagnetControl2Ui') import MagnetControl2Ui from Zmq.Ports import RequestReply import pyqtgraph as pg import time import numpy as np from Utility.Math import pruneData mA_per_min = 1E-3/60. mOhm = 1E-3 class MagnetControlWidget(MagnetControl2Ui.Ui_Widget, QWidget): '''The GUI for magnet control''' def __init__(self, parent=None):
Created on Wed Sep 16 17:45:56 2015 @author: wisp10 """ from PyQt4.QtGui import QWidget, QDoubleSpinBox, QHeaderView, QCheckBox, QFileDialog from PyQt4.QtCore import QSettings #from PyQt4.QtCore import QObject, pyqtSignal, QThread, QSettings, QString, QByteArray from MagnetControlRemote import MagnetControlRemote from Zmq.Subscribers import HousekeepingSubscriber from LabWidgets.Utilities import compileUi compileUi('AdrControlUi') import AdrControlUi import time class State: IDLE = 0 RAMPING = 1 HOLDING = 2 class CurrentRateSpinBox(QDoubleSpinBox): def __init__(self, parent=None): QDoubleSpinBox.__init__(self, parent) self.setAccelerated(True) self.setMinimum(0) self.setMaximum(800)
# -*- coding: utf-8 -*- """ ADR Temperature control Branched from old UNM/FJ code @author: Felix Jaeckel <*****@*****.**> """ import time from LabWidgets.Utilities import compileUi compileUi('AdrTemperatureControl2Ui') import AdrTemperatureControl2Ui as Ui import logging logging.basicConfig(level=logging.INFO, format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s', datefmt='%m-%d %H:%M:%S', filename='AdrTemperatureControlPid%s.log' % time.strftime('%Y%m%d'), filemode='a') console = logging.StreamHandler() console.setLevel(logging.WARN) formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s') console.setFormatter(formatter) logging.getLogger('').addHandler(console) logger = logging.getLogger(__name__) class SIUnits: milli = 1E-3 mK = milli minute = 60. class StopThread(Exception): pass
# -*- coding: utf-8 -*- """ Readout of AVS47 resistance bridge in single channel mode for simplicity Created on Fri Dec 04 12:49:18 2015 @author: Felix Jaeckel <*****@*****.**> """ import time, warnings from LabWidgets.Utilities import connectAndUpdate, saveWidgetToSettings, restoreWidgetFromSettings, compileUi compileUi('Avs47Ui') import Avs47Ui as Ui from Zmq.Zmq import ZmqPublisher from Zmq.Ports import PubSub #,RequestReply from PyQt4.QtGui import QWidget from PyQt4.QtCore import QSettings, pyqtSignal import pyqtgraph as pg from PyQt4.Qt import Qt import logging logging.basicConfig(level=logging.WARN) import os.path from Visa.AVS47 import Avs47 from Visa.Agilent34401A import Agilent34401A from Calibration.RuOx import RuOx600, RuOxBus, RuOx2005 #ruOxCalibration = RuOx600() # From breakpoint table
# -*- coding: utf-8 -*- """ Created on Tue Feb 16 12:30:54 2016 @author: wisp10 """ from __future__ import print_function, division from LabWidgets.Utilities import compileUi compileUi('PyDaqMx_AiSpectrumAnalyzerUi') import PyDaqMx as daq from PyQt4 import QtGui from PyQt4.QtCore import QSettings, QThread, pyqtSignal import pyqtgraph as pg import numpy as np import time import matplotlib.mlab as mlab import h5py as hdf import PyDaqMx_AiSpectrumAnalyzerUi as ui from PyDaqMxGui import AiConfigLayout from Zmq.Zmq import RequestReplyThreadWithBindings from Zmq.Ports import RequestReply class AiThread(QThread): samplesAvailable = pyqtSignal(float, np.ndarray) def setTask(self, task, samplesPerChunk): self.task = task
# -*- coding: utf-8 -*- """ Program to monitor diode thermometer using Agilent DMM readout Created on 2015-11-16 @author: Felix Jaeckel <*****@*****.**> """ from LabWidgets.Utilities import compileUi compileUi('DiodeThermometerV2Ui') import DiodeThermometerV2Ui as ui from PyQt4.QtGui import QWidget, QMessageBox from PyQt4.QtCore import pyqtSignal, QThread, QSettings from Visa.Agilent34401A import Agilent34401A import numpy as np import time from Calibration.DiodeThermometers import DT470Thermometer, DT670Thermometer, Si70Thermometer from Utility.Math import pruneData import pyqtgraph as pg class DiodeThermometerThread(QThread): measurementReady = pyqtSignal(float, float) error = pyqtSignal(str) def __init__(self, dmm, parent=None): QThread.__init__(self, parent) self.dmm = dmm
# -*- coding: utf-8 -*- """ Created on Thu Aug 20 13:10:58 2015 @author: wisp10 """ from PyQt4 import QtGui from PyQt4.QtCore import QThread, pyqtSignal from LabWidgets.Utilities import compileUi compileUi('DaqGuiUi') import DaqGuiUi class MeasurementThread(QThread): def requestStop(self): self.stopRequested = True def run(self): self.stopRequested = False for i in range(100): print i self.msleep(500) if self.stopRequested: break class MainWidget(QtGui.QWidget, DaqGuiUi.Ui_Form): def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) self.setupUi(self)
from Calibration.RuOx import RuOx600, RuOxBus, RuOx2005, RuOxBox from LockinThermometerPDA import LockinThermometerAutomaton from Zmq.Zmq import ZmqPublisher from Zmq.Ports import PubSub #,RequestReply import os try: from PyQt4.QtCore import QString except ImportError: # we are using Python3 so QString is not defined QString = str import time import logging logging.basicConfig(level=logging.DEBUG) from LabWidgets.Utilities import compileUi compileUi('LockinThermometerExpandUi') import LockinThermometerExpandUi as Ui import pyqtgraph as pg class LockinThermometerWithExpandWidget(Ui.Ui_Form, QWidget): def __init__(self, parent=None): super(LockinThermometerWithExpandWidget, self).__init__(parent) self.setupUi(self) self.setWindowTitle('Lockin Thermometer') self.Rthermometer = float('nan') axis = pg.DateAxisItem(orientation='bottom') self.plot = pg.PlotWidget(axisItems={'bottom': axis}) self.plot.setBackground('w') self.plot.plotItem.showGrid(x=True, y=True)
# -*- coding: utf-8 -*- """ Created on Tue Dec 15 23:47:22 2015 @author: wisp10 """ import time #import datetime from LabWidgets.Utilities import compileUi compileUi('SR830_GuiUi') import SR830_GuiUi as Ui #from math import isnan #from Zmq.Zmq import ZmqPublisher #from Zmq.Ports import PubSub #,RequestReply #from LabWidgets.Utilities import connectAndUpdate, saveWidgetToSettings, restoreWidgetFromSettings import pyqtgraph as pg from PyQt4.QtGui import QWidget, QFileDialog from PyQt4.QtCore import QSettings, QTimer, QString #,pyqtSignal from SR830_New import SR830 from Zmq.Zmq import ZmqPublisher #from Utility.Utility import PeriodicMeasurementThread #import gc #gc.set_debug(gc.DEBUG_LEAK)
# -*- coding: utf-8 -*- """ Created on Thu Jan 14 17:20:42 2016 @author: wisp10 """ OrganizationName = 'McCammon X-ray Astro Physics' ApplicationName = 'legacy DAQ Streaming' Version = '0.2' from LabWidgets.Utilities import compileUi compileUi('LegacyDaqStreamingUi') import LegacyDaqStreamingUi as Ui from PyQt4.QtGui import QWidget, QCheckBox, QComboBox, QLineEdit, QDoubleSpinBox, QSpinBox import numpy as np import pyqtgraph as pg try: import PyNiLegacyDaq as daq except WindowsError, e: text = ("Windows was unable to load the NI-DAQ DLL: %s\n" "This could be because another program is using it. " "It is a single-process DLL therefore only one program may use it at a time.\n" "The work-around is to put all programs that need to use it into a single process. " "Try running from PyLegacyDaq_Combined.py instead!") % e print text from PyQt4.QtGui import QApplication, QMessageBox app = QApplication([]) QMessageBox.critical(None, "Unable to load NI-DAQ DLL", text)
""" from PyQt4.QtGui import QWidget #, QDoubleSpinBox, QSpinBox, QHeaderView from PyQt4.QtCore import pyqtSignal, QThread, QSettings, QString, QByteArray #, QObject import time from Zmq.Subscribers import HousekeepingSubscriber import numpy as np from Visa.SR830 import SR830 from AnalogSource import VoltageSourceSR830, VoltageSourceDaq, CurrentSourceKeithley from AnalogMeter import VoltmeterDaq from LabWidgets.Utilities import compileUi compileUi('TES_IVSweepsDaqUi') import TES_IVSweepsDaqUi import h5py as hdf def limit(x, xMin, xMax): return max(min(x, xMax), xMin) import numpy as np def determineCriticalCurrent(Vdrives, Vmeas): nPoints = len(Vdrives) ## First, lay out a linear fit starting from smallest Vdrive.
@author: Felix Jaeckel <*****@*****.**> """ from __future__ import division OrganizationName = 'McCammon Astrophysics' OrganizationDomain = 'wisp.physics.wisc.edu' ApplicationName = 'MultitoneLockin' Copyright = '(c) Felix T. Jaeckel <*****@*****.**>' Version = '0.25' from Lockin import LockInMkl from MultitoneGenerator import MultitoneGeneratorMkl from LabWidgets.Utilities import compileUi, saveWidgetToSettings, restoreWidgetFromSettings, widgetValue compileUi('MultiLockinUi') import MultiLockinUi as ui from PyQt4.QtGui import QWidget, QMessageBox, QDoubleSpinBox, QSpinBox, QCheckBox, QHeaderView, QAbstractSpinBox, QAbstractButton, QLineEdit, QComboBox, QFileDialog from PyQt4.QtCore import QThread, QSettings, pyqtSignal, QObject, pyqtSlot, QByteArray from DecimateFast import DecimatorCascade import DAQ.PyDaqMx as daq from Utility.HdfWriter import HdfStreamsWriter, HdfStreamWriter, HdfVectorWriter from Utility.HkLogger import HkLogger import h5py as hdf import time import numpy as np import Queue import pyqtgraph as pg pg.setConfigOption('background', 'w') pg.setConfigOption('foreground', 'k')
# -*- coding: utf-8 -*- """ Created on Fri Nov 27 13:55:39 2015 @author: wisp10 """ from PyQt4.QtGui import QWidget from LabWidgets.Utilities import compileUi compileUi('ZmqRequestReplyServerUi') import ZmqRequestReplyServerUi from Zmq import ZmqRequestReplyThread, ZmqReply import logging logging.basicConfig(level=logging.DEBUG) class ServerThread(ZmqRequestReplyThread): def linkToControls(self, spinBox): self._spinBox = spinBox def processRequest(self, origin, timeStamp, request): print "Processing request..." if request.target == 'value': if request.command == 'set': print "request.parameters", request.parameters self._spinBox.setValue(request.parameters) return ZmqReply()
# but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. """ A function generator example for PyDaqMx, using PyQt4 and pyqtgraph for the GUI Continuously generates sample to allow for (almost) live updates to the function. Created on Mon Nov 09 14:45:59 2015 @author: Felix Jaeckel <*****@*****.**> """ from LabWidgets.Utilities import compileUi compileUi('FunctionGeneratorUi') import FunctionGeneratorUi from PyQt4.QtGui import QWidget import numpy as np import pyqtgraph as pg import PyDaqMx as daq from PyQt4.QtCore import QThread, QSettings, pyqtSignal try: from PyQt4.QtCore import QString except ImportError: QString = str from scipy import signal
# -*- coding: utf-8 -*- """ Created on Mon Oct 30 12:12:32 2017 @author: Lan Hu """ from LabWidgets.Utilities import compileUi compileUi('DiodeThermometer_MultiUi') import DiodeThermometer_MultiUi as ui #from DiodeThermometer2Copy import DiodeThermometerWidget from PyQt4.QtGui import * from PyQt4.QtCore import * import pyqtgraph as pg from Visa.Agilent34401A import Agilent34401A from Zmq.Zmq import ZmqPublisher from Zmq.Ports import PubSub #,RequestReply import numpy as np import time from Calibration.DiodeThermometers import DT470Thermometer, DT670Thermometer, Si70Thermometer from Visa.VisaWidgets import VisaCombo from LabWidgets.Utilities import saveWidgetToSettings, restoreWidgetFromSettings import os class DiodeThermometerThread(QThread): measurementReady = pyqtSignal(float, float)
# -*- coding: utf-8 -*- """ Use the lock-in for thermometer (resistive sensor) read-out. Optionally, adjust sine-out amplitude to keep constant sensor excitation. Created on Wed Dec 16 17:13:15 2015 @author: wisp10 """ import time from LabWidgets.Utilities import compileUi compileUi('LockinThermometerUi2') import LockinThermometerUi2 as Ui import pyqtgraph as pg from PyQt4.QtGui import QWidget, QErrorMessage, QIcon from PyQt4.QtCore import QSettings, QTimer, QString from PyQt4.Qt import Qt from Calibration.CalibrationDatabase import ThermometerCalIds, getThermometerCalibration from Visa.SR830_New import SR830 from Visa.VisaInstrument import CommunicationsError import os.path from Zmq.Zmq import ZmqPublisher, RequestReplyThreadWithBindings from Zmq.Ports import LockInPubSub, LockInRequestReply from Zmq.Subscribers import HousekeepingSubscriber
# -*- coding: utf-8 -*- """ Program to control and log the Piezo voltage/current Created on 2015-11-16 @author: Felix Jaeckel <*****@*****.**> """ from LabWidgets.Utilities import compileUi compileUi('PiezoControlUi') import PiezoControlUi as ui from PyQt4.QtGui import QWidget, QMessageBox from PyQt4.QtCore import pyqtSignal, QThread, QSettings from Visa.Keithley6430 import Keithley6430 import numpy as np import time import pyqtgraph as pg class PiezoControlThread(QThread): measurementReady = pyqtSignal(float, float, float) rampComplete = pyqtSignal() error = pyqtSignal(str) def __init__(self, sourceMeter, parent=None): QThread.__init__(self, parent) self.sourceMeter = sourceMeter self.interval = 1.0
# -*- coding: utf-8 -*- """ Created on Thu Jun 09 10:51:15 2016 @author: wisp10 """ from LabWidgets.Utilities import compileUi compileUi('WaterLeakUi') import WaterLeakUi as ui from PyQt4.QtGui import QWidget, QListWidgetItem from PyQt4.QtCore import QTimer, Qt, QSettings, QString from GmailDetector import sendGmail import DAQ.PyDaqMx as daq import time import numpy as np class WaterLeakWidget(QWidget, ui.Ui_Form): def __init__(self, parent=None): super(WaterLeakWidget, self).__init__(parent) self.setupUi(self) self.testPb.clicked.connect(self.sendTestAlert) self.armPb.toggled.connect(self.updateArmedText) self.addEmailPb.clicked.connect(self.addEmail) self.deleteEmailPb.clicked.connect(self.deleteEmail) self.restoreSettings() timer = QTimer()
Record TES I-V curves using a single DAQ device with AO and AI. Produces triangular sweeps (up and down) and records data to HDF5 file. New code started at Tsinghua October/November 2016 # v0.3: Fixed decimation to be zero_phase # v0.4: Introduced AuxAoRamping, even between sweeps @author: Felix Jaeckel <*****@*****.**> """ OrganizationName = 'McCammon Astrophysics' OrganizationDomain = 'wisp.physics.wisc.edu' ApplicationName = 'IvCurveDaq' Version = '0.4' from LabWidgets.Utilities import compileUi, saveWidgetToSettings, restoreWidgetFromSettings compileUi('IvCurveDaqUi') import IvCurveDaqUi as ui from PyQt4.QtGui import QWidget, QMessageBox, qApp from PyQt4.QtCore import QThread, QSettings, pyqtSignal, QTimer #from MeasurementScripts.NoiseVsBiasAndTemperature import Squid from OpenSQUID.OpenSquidRemote import OpenSquidRemote, Pfl102Remote from Utility.HkLogger import HkLogger import DAQ.PyDaqMx as daq import time import numpy as np #import scipy.signal import decimate from Utility.Decimate import decimate import pyqtgraph as pg import traceback import gc