def __init__(self, parent=None,**kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) self.I=kwargs.get('I',None) self.I.set_state(SQR2=1) self.setWindowTitle(self.I.H.version_string+' : '+params.get('name','').replace('\n',' ') ) from PSL.analyticsClass import analyticsClass self.math = analyticsClass() self.plot=self.add2DPlot(self.plot_area,enableMenu=False); self.plot.setMouseEnabled(False,True) labelStyle = {'color': 'rgb(255,255,255)', 'font-size': '11pt'} self.plot.setLabel('left','Distance', units='M',**labelStyle) self.plot.setLabel('bottom','Time', units='S',**labelStyle) self.plot.setYRange(0,.5) self.plot.setLimits(yMax=2,yMin=0) self.samples = 1000 self.legend = self.plot.addLegend(offset=(-10,30)) self.curve1 = self.addCurve(self.plot,'Distance(METERS)') self.X=np.linspace(-10,0,self.samples);self.Y = np.zeros(self.samples) self.WidgetLayout.setAlignment(QtCore.Qt.AlignLeft) self.addPauseButton(self.bottomLayout,self.pause) self.paused=False;self.running=True self.timer = self.newTimer() self.timer.timeout.connect(self.run_np) self.num=0 self.ST=time.time() self.timer.start(3)
def __init__(self, parent=None,**kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) self.I=kwargs.get('I',None) self.funcs = {k: getattr(self.I, k) for k in dir(self.I)} self.setWindowTitle(self.I.H.version_string+' : '+params.get('name','').replace('\n',' ') ) from PSL.analyticsClass import analyticsClass self.math = analyticsClass() self.prescalerValue=0 self.plot=self.add2DPlot(self.plot_area,enableMenu=False); self.plot.setMouseEnabled(False,True) labelStyle = {'color': 'rgb(255,255,255)', 'font-size': '11pt'} self.plot.setLabel('left','Voltage', units='V',**labelStyle) self.plot.setLabel('bottom','Time', units='S',**labelStyle) self.samples = 2000 self.legend = self.plot.addLegend(offset=(-10,30)) self.curve = self.addCurve(self.plot,'INPUT') self.X=np.linspace(-10,0,self.samples);self.Y = np.zeros(self.samples) self.running=True self.timer = self.newTimer() self.timer.timeout.connect(self.run_np) self.num=0 self.ST=time.time() self.LUT = 0 self.timer.start(1) self.streamfunc=self.cmdlist.currentText() self.averagingSamples = 1
def __init__(self, parent=None,**kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) self.I=kwargs.get('I',None) from PSL.analyticsClass import analyticsClass self.CC = analyticsClass() self.setWindowTitle(self.I.H.version_string+' : '+params.get('name','').replace('\n',' ') ) self.plot1=self.add2DPlot(self.plot_area) labelStyle = {'color': 'rgb(255,255,255)', 'font-size': '11pt'} self.plot1.setLabel('left','Voltage -->', units='V',**labelStyle) self.plot1.setLabel('bottom','Time -->', units='S',**labelStyle) self.plot1.setYRange(-8.5,8.5) self.I.set_gain('CH1',1) self.I.configure_trigger(0,'CH1',0) self.tg=1 self.tgLabel.setText(str(5000*self.tg*1e-3)+'mS') self.x=[] self.looptimer=QtCore.QTimer() self.curveCH1 = self.addCurve(self.plot1,'CH1') self.CH1Fit = self.addCurve(self.plot1,'CH1 Fit') self.region = pg.LinearRegionItem([self.tg*50,self.tg*800]) self.region.setZValue(-10) self.plot1.addItem(self.region) self.lognum=0 self.state=0 self.I.set_state(SQR1=0) self.msg.setText("Fitting fn :\noff+amp*exp(-damp*x)*sin(x*freq+ph)") self.Params=[]
def __init__(self, parent=None, **kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) self.I = kwargs.get('I', None) self.setWindowTitle(self.I.H.version_string + ' : ' + params.get('name', '').replace('\n', ' ')) from PSL.analyticsClass import analyticsClass self.math = analyticsClass() self.prescalerValue = 0 self.plot = self.add2DPlot(self.plot_area, enableMenu=False) self.enableCrossHairs(self.plot, []) labelStyle = {'color': 'rgb(255,255,255)', 'font-size': '11pt'} self.plot.setLabel('left', 'Voltage -->', units='V', **labelStyle) self.plot.setLabel('bottom', 'Time -->', units='S', **labelStyle) self.plot.setYRange(-8.5, 8.5) self.I.set_gain('CH1', 1) self.I.set_gain('CH2', 1) self.I.set_pv2(0) self.I.set_pv3(0) self.plot.setLimits(yMax=8, yMin=-8, xMin=0, xMax=4e-3) self.I.configure_trigger(0, 'CH1', 0, prescaler=self.prescalerValue) self.tg = 2 self.max_samples = 2000 self.samples = self.max_samples self.timer = QtCore.QTimer() self.legend = self.plot.addLegend(offset=(-10, 30)) self.curve1 = self.addCurve(self.plot, 'INPUT 1(CH2)') self.curve2 = self.addCurve(self.plot, 'INPUT 2(CH3)') self.curve3 = self.addCurve(self.plot, 'OUTPUT (CH1)') self.WidgetLayout.setAlignment(QtCore.Qt.AlignLeft) #Utility widgets #Widgets related to power supplies PV1,PVS2,PV3,PCS self.supplySection = self.supplyWidget(self.I) self.WidgetLayout.addWidget(self.supplySection) #Widgets related to Analog Waveform generators self.sineSection = self.sineWidget(self.I) self.WidgetLayout.addWidget(self.sineSection) #Control widgets a1 = { 'TITLE': 'TIMEBASE', 'MIN': 0, 'MAX': 9, 'FUNC': self.set_timebase, 'UNITS': 'S', 'TOOLTIP': 'Set Timebase of the oscilloscope' } self.ControlsLayout.addWidget(self.dialIcon(**a1)) self.ControlsLayout.addWidget( self.gainIconCombined(FUNC=self.I.set_gain, LINK=self.gainChanged)) self.running = True self.timer.singleShot(100, self.run)
def __init__(self, parent=None,**kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) self.I=kwargs.get('I',None) self.setWindowTitle(self.I.H.version_string+' : '+params.get('name','').replace('\n',' ') ) from PSL.analyticsClass import analyticsClass self.math = analyticsClass() self.plot=self.add2DPlot(self.plot_area,enableMenu=False); self.plot.setMouseEnabled(False,True) labelStyle = {'color': 'rgb(255,255,255)', 'font-size': '11pt'} self.plot.setLabel('left','Voltage', units='V',**labelStyle) self.plot.setLabel('bottom','Time', units='S',**labelStyle) self.plot.setYRange(-.2,5) self.plot.setLimits(yMax=8,yMin=-0.2) self.plot.getViewBox().enableAutoRange(self.plot.getViewBox().XAxis) self.tg=100;self.samples = 1000 self.legend = self.plot.addLegend(offset=(-10,30)) self.curve1 = self.addCurve(self.plot,'Voltage(CH1)') self.WidgetLayout.setAlignment(QtCore.Qt.AlignLeft) self.WidgetLayout.addWidget(self.simpleButtonIcon(TITLE='START',FUNC=self.start)) self.WidgetLayout.addWidget(self.simpleButtonIcon(TITLE='STOP',FUNC=self.stop)) self.ControlsLayout.addWidget(self.wideButtonIcon(TITLE='Voltage(CH1)',FUNC=self.get_voltage,UNITS='V')) self.addPauseButton(self.bottomLayout,self.pause) self.paused=False;self.running=True self.timer = self.newTimer() self.timer.timeout.connect(self.run_np) self.num=0 self.I.set_state(SQR1=1)
def __init__(self, parent=None, **kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) self.I = kwargs.get('I', None) self.I.set_state(SQR2=1) self.setWindowTitle(self.I.H.version_string + ' : ' + params.get('name', '').replace('\n', ' ')) from PSL.analyticsClass import analyticsClass self.math = analyticsClass() self.plot = self.add2DPlot(self.plot_area, enableMenu=False) self.plot.setMouseEnabled(False, True) labelStyle = {'color': 'rgb(255,255,255)', 'font-size': '11pt'} self.plot.setLabel('left', 'Distance', units='M', **labelStyle) self.plot.setLabel('bottom', 'Time', units='S', **labelStyle) self.plot.setYRange(0, .5) self.plot.setLimits(yMax=2, yMin=0) self.samples = 1000 self.legend = self.plot.addLegend(offset=(-10, 30)) self.curve1 = self.addCurve(self.plot, 'Distance(METERS)') self.X = np.linspace(-10, 0, self.samples) self.Y = np.zeros(self.samples) self.WidgetLayout.setAlignment(QtCore.Qt.AlignLeft) self.addPauseButton(self.bottomLayout, self.pause) self.paused = False self.running = True self.timer = self.newTimer() self.timer.timeout.connect(self.run_np) self.num = 0 self.ST = time.time() self.timer.start(3)
def __init__(self, parent=None, **kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) self.I = kwargs.get('I', None) from PSL.analyticsClass import analyticsClass self.CC = analyticsClass() self.setWindowTitle(self.I.H.version_string + ' : ' + params.get('name', '').replace('\n', ' ')) self.plot1 = self.add2DPlot(self.plot_area) labelStyle = {'color': 'rgb(255,255,255)', 'font-size': '11pt'} self.plot1.setLabel('left', 'Voltage -->', units='V', **labelStyle) self.plot1.setLabel('bottom', 'Time -->', units='S', **labelStyle) self.plot1.setYRange(-8.5, 8.5) self.I.set_gain('CH1', 1) self.I.configure_trigger(0, 'CH1', 0) self.tg = 1 self.tgLabel.setText(str(5000 * self.tg * 1e-3) + 'mS') self.x = [] self.looptimer = QtCore.QTimer() self.curveCH1 = self.addCurve(self.plot1, 'CH1') self.CH1Fit = self.addCurve(self.plot1, 'CH1 Fit') self.region = pg.LinearRegionItem([self.tg * 50, self.tg * 800]) self.region.setZValue(-10) self.plot1.addItem(self.region) self.lognum = 0 self.state = 0 self.I.set_state(SQR1=0) self.msg.setText("Fitting fn :\noff+amp*exp(-damp*x)*sin(x*freq+ph)") self.Params = []
def __init__(self, parent=None, **kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) self.I = kwargs.get('I', None) self.setWindowTitle(self.I.H.version_string + ' : ' + params.get('name', '').replace('\n', ' ')) from PSL.analyticsClass import analyticsClass self.math = analyticsClass() self.prescalerValue = 0 self.plot = self.add2DPlot(self.plot_area, enableMenu=False) #self.enableCrossHairs(self.plot,[]) labelStyle = {'color': 'rgb(255,255,255)', 'font-size': '11pt'} self.plot.setLabel('left', 'V (CH1)', units='V', **labelStyle) self.plot.setLabel('bottom', 'Time', units='S', **labelStyle) self.plot.setYRange(-8.5, 8.5) self.tg = 0.5 self.max_samples = 10000 self.samples = self.max_samples self.timer = QtCore.QTimer() self.legend = self.plot.addLegend(offset=(-10, 30)) self.curveCH1 = self.addCurve(self.plot, 'RAMP In(CH1)') self.autoRange() self.WidgetLayout.setAlignment(QtCore.Qt.AlignLeft) self.ControlsLayout.setAlignment(QtCore.Qt.AlignRight) a1 = { 'TITLE': 'Acquire Data', 'FUNC': self.run, 'TOOLTIP': 'Sets SQR1 to HIGH, and immediately records the ramp' } self.ampGain = self.buttonIcon(**a1) self.WidgetLayout.addWidget(self.ampGain) self.WidgetLayout.addWidget(self.addSQR1(self.I)) #Control widgets a1 = { 'TITLE': 'TIMEBASE', 'MIN': 0, 'MAX': 9, 'FUNC': self.set_timebase, 'UNITS': 'S', 'TOOLTIP': 'Set Timebase of the oscilloscope' } self.ControlsLayout.addWidget(self.dialIcon(**a1)) G = self.gainIcon(FUNC=self.I.set_gain, LINK=self.gainChanged) self.ControlsLayout.addWidget(G) G.g1.setCurrentIndex(1) G.g2.setEnabled(False) self.running = True self.fit = False
def __init__(self, parent=None, **kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) from PSL.analyticsClass import analyticsClass self.math = analyticsClass() self.I = kwargs.get('I', None) self.setWindowTitle(params.get('name', '').replace('\n', ' ')) self.prescalerValue = 0 self.plot = self.add2DPlot(self.plot_area, enableMenu=False) self.enableCrossHairs(self.plot) labelStyle = {'color': 'rgb(255,255,255)', 'font-size': '11pt'} self.plot.setLabel('left', 'V (CH1)', units='V', **labelStyle) self.plot.setLabel('bottom', 'Time', units='S', **labelStyle) self.plotF = self.add2DPlot(self.plot_area, enableMenu=False) self.plotF.setLabel('bottom', 'Frequency', units='Hz') self.plotF.autoRange() self.plotF.getPlotItem().setMouseEnabled(True, False) self.tg = 20. self.max_samples = 5000 self.samples = self.max_samples self.plot.setLimits(yMax=3, yMin=-3, xMin=0, xMax=self.samples * self.tg * 1e-6) self.plot.setYRange(-3, 3) self.plotF.setLimits(yMax=3, yMin=-0.001, xMin=70, xMax=20e3) self.plotF.setYRange(-0.001, 3) self.timer = self.newTimer() self.legend = self.plot.addLegend(offset=(-10, 30)) self.curve1 = self.addCurve(self.plot, 'INPUT (MIC)') self.curveFFT = self.addCurve(self.plotF, 'Fourier Transform') self.WidgetLayout.setAlignment(QtCore.Qt.AlignLeft) #Control widgets self.w1 = self.addW1(self.I) self.WidgetLayout.addWidget(self.w1) self.w2 = self.addW2(self.I) self.WidgetLayout.addWidget(self.w2) self.voltmeterF = self.displayIcon( TITLE='Analysis', TOOLTIP="Displays amplitude, frequency of MIC input") self.WidgetLayout.addWidget(self.voltmeterF) #self.dial = self.dialIcon(TITLE = 'F center',MIN=10,MAX=10000,FUNC=lambda x:x,TOOLTIP="Displays amplitude, frequency of MIC input") #self.WidgetLayout.addWidget(self.dial) self.addPauseButton(self.bottomLayout, self.pause) self.running = True self.paused = False self.timer.singleShot(100, self.run)
def __init__(self, parent=None, **kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) self.I = kwargs.get('I', None) self.setWindowTitle(self.I.H.version_string + ' : ' + params.get('name', '').replace('\n', ' ')) from PSL.analyticsClass import analyticsClass self.math = analyticsClass() self.prescalerValue = 0 self.plot = self.add2DPlot(self.plot_area, enableMenu=False) labelStyle = {'color': 'rgb(255,255,255)', 'font-size': '11pt'} self.plot.setLabel('left', 'Voltage -->', units='V', **labelStyle) self.plot.setLabel('bottom', 'Time -->', units='S', **labelStyle) self.plot.setYRange(-8.5, 8.5) self.I.set_gain('CH1', 1) self.I.set_gain('CH2', 1) self.I.set_pv2(0) self.I.set_pv3(0) self.plot.setLimits(yMax=8, yMin=-8, xMin=0, xMax=4e-3) self.I.configure_trigger(0, 'CH1', 0, prescaler=self.prescalerValue) self.tg = 1. self.max_samples = 5000 self.samples = self.max_samples self.timer = self.newTimer() self.legend = self.plot.addLegend(offset=(-10, 30)) self.curve1 = self.addCurve(self.plot, 'INPUT (CH1)') self.WidgetLayout.setAlignment(QtCore.Qt.AlignLeft) #Control widgets a1 = { 'TITLE': 'TIMEBASE', 'MIN': 0, 'MAX': 9, 'FUNC': self.set_timebase, 'UNITS': 'S', 'TOOLTIP': 'Set Timebase of the oscilloscope' } self.WidgetLayout.addWidget(self.dialIcon(**a1)) self.WidgetLayout.addWidget( self.gainIconCombined(FUNC=self.I.set_gain, LINK=self.gainChanged)) a1 = { 'TITLE': 'Analyse', 'FUNC': self.measureFreq, 'TOOLTIP': 'Curve fit the trace and find the frequency' } self.ampGain = self.buttonIcon(**a1) self.WidgetLayout.addWidget(self.ampGain) self.running = True self.fit = False self.timer.singleShot(100, self.run)
def __init__(self, parent=None, **kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) self.I = kwargs.get('I', None) self.setWindowTitle(self.I.H.version_string + ' : ' + params.get('name', '').replace('\n', ' ')) self.plot1 = self.add2DPlot(self.plot_area) labelStyle = {'color': 'rgb(255,255,255)', 'font-size': '11pt'} self.plot1.setLabel('bottom', 'Time -->', units='S', **labelStyle) self.p2 = self.enableRightAxis(self.plot1) self.plot1.getAxis('left').setLabel('Vl -->>', color='#ffffff') self.plot1.getAxis('right').setLabel('I -->>', units='A', color='#00ffff') self.I.set_gain('CH1', 1) self.I.set_gain('CH2', 1) self.plot1.setYRange(-8.5, 8.5) self.p2.setYRange(-8.5 / self.resistance.value(), 8.5 / self.resistance.value()) from PSL.analyticsClass import analyticsClass self.CC = analyticsClass() self.I.configure_trigger(0, 'CH1', 0) self.tg = 20 self.max_samples = 2000 self.samples = 2000 self.prescaler = 0 self.set_timebase(3) self.timer = QtCore.QTimer() self.curveCH1 = self.addCurve(self.plot1, 'VL(CH1-CH2)') self.curveCH2 = self.addCurve(self.p2, 'Current', pen=[0, 255, 255]) self.WidgetLayout.setAlignment(QtCore.Qt.AlignLeft) self.fdial = self.addW1(self.I) self.WidgetLayout.addWidget(self.fdial) self.fdial.dial.setValue(100) self.WidgetLayout.addWidget(self.addTimebase(self.I, self.set_timebase)) self.timer.singleShot(100, self.run) self.resultsTable.setRowCount(50) self.resultsTable.setColumnCount(4) self.resultsTable.setHorizontalHeaderLabels( ['F', 'Vl', 'I (mA)', 'XL = Vl/I']) self.acquireParams = False self.running = True self.currentRow = 0 self.plotAButton.setText('F vs XL') self.plotBButton.setParent(None) # Text('F vs 1/XL') self.splitter.setSizes([10, 1000])
def __init__(self, parent=None,**kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) self.I=kwargs.get('I',None) self.I.set_gain('CH1',2) self.I.set_gain('CH2',2) self.setWindowTitle(self.I.H.version_string+' : '+params.get('name','').replace('\n',' ') ) self.plot1=self.add2DPlot(self.plot_area) self.plot2=self.add2DPlot(self.plot_area) #self.enableCrossHairs(self.plot2,[]) self.legend = self.plot1.addLegend(offset=(-10,30)) self.curve1 = self.addCurve(self.plot1,'INPUT (CH1)') self.curve2 = self.addCurve(self.plot1,'OUTPUT(CH2)') self.p2=self.enableRightAxis(self.plot2) self.plot2.getAxis('right').setLabel('Phase', color='#00ffff') self.plot2.getAxis('left').setLabel('Amplitude', color='#ffffff') self.plot1.getAxis('bottom').setLabel('Time',units='S' ,color='#ffffff') self.plot2.getAxis('bottom').setLabel('Frequency',units='Hz', color='#ffffff') self.p2.setYRange(-360,360) self.curvePhase=self.addCurve(self.p2,'PHASE',pen=[0,255,255])#pg.PlotCurveItem() self.curveAmp = self.addCurve(self.plot2,'AMPLITUDE',pen=[255,255,255]) #self.ControlsLayout.addWidget(self.gainIconCombined(FUNC=self.I.set_gain,LINK=self.autoRange)) self.pv = self.addPV3(self.I) self.ControlsLayout.addWidget(self.pv) self.pv.dial.setValue(2048) self.totalpoints=2000 self.samples = 2000 self.X=[] self.Y=[] self.curves=[] self.curveLabels=[] from PSL.analyticsClass import analyticsClass self.CC = analyticsClass() self.I.configure_trigger(0,'CH1',0) self.I.set_sine1(5000) self.I.__autoRangeScope__(2) self.I.set_sine1(2) self.freqs=[] self.amps=[] self.dP=[] self.STARTFRQ=self.startFreq.value() self.ENDFRQ=self.stopFreq.value() self.STEPFRQ=self.stepFreq.value() self.loop=None self.plot2.setXRange(self.STARTFRQ,self.ENDFRQ) self.plot2.setYRange(0,1.) self.plot1.setLimits(xMin = 0,yMin=-8,yMax=8) self.running = False
def __init__(self, parent=None, **kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) self.I = kwargs.get('I', None) self.I.set_gain('CH1', 2) self.I.set_gain('CH2', 2) self.setWindowTitle(self.I.H.version_string + ' : ' + params.get('name', '').replace('\n', ' ')) self.plot1 = self.add2DPlot(self.plot_area) self.plot2 = self.add2DPlot(self.plot_area) self.legend = self.plot1.addLegend(offset=(-10, 30)) self.curve1 = self.addCurve(self.plot1, 'INPUT (CH1)') self.curve2 = self.addCurve(self.plot1, 'OUTPUT(CH2)') self.p2 = self.enableRightAxis(self.plot2) self.plot2.getAxis('right').setLabel('Phase', color='#00ffff') self.plot2.getAxis('left').setLabel('Amplitude', color='#ffffff') self.plot1.getAxis('bottom').setLabel('Time', units='S', color='#ffffff') self.plot2.getAxis('bottom').setLabel('Frequency', units='Hz', color='#ffffff') self.p2.setYRange(-360, 360) self.curvePhase = self.addCurve(self.p2, 'PHASE', pen=[0, 255, 255]) #pg.PlotCurveItem() self.curveAmp = self.addCurve(self.plot2, 'AMPLITUDE', pen=[255, 255, 255]) self.totalpoints = 2000 self.samples = 2000 self.X = [] self.Y = [] self.curves = [] self.curveLabels = [] from PSL.analyticsClass import analyticsClass self.CC = analyticsClass() self.I.configure_trigger(0, 'CH1', 0) self.I.set_sine1(5000) self.I.__autoRangeScope__(2) self.I.set_sine1(2) self.freqs = [] self.amps = [] self.dP = [] self.STARTFRQ = self.startFreq.value() self.ENDFRQ = self.stopFreq.value() self.STEPFRQ = self.stepFreq.value() self.loop = None self.plot2.setXRange(self.STARTFRQ, self.ENDFRQ) self.plot2.setYRange(0, 1.) self.plot1.setLimits(xMin=0, yMin=-8, yMax=8) self.running = False
def __init__(self, parent=None,**kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) self.I=kwargs.get('I',None) self.setWindowTitle(self.I.H.version_string+' : '+params.get('name','').replace('\n',' ') ) from PSL.analyticsClass import analyticsClass self.math = analyticsClass() self.prescalerValue=0 self.plot=self.add2DPlot(self.plot_area,enableMenu=True) self.enableCrossHairs(self.plot,[]) labelStyle = {'color': 'rgb(255,255,255)', 'font-size': '11pt'} self.plot.setLabel('left','V (CH1)', units='V',**labelStyle) self.plot.setLabel('bottom','Time', units='S',**labelStyle) self.hLine = pg.InfiniteLine(angle=0, movable=False,pen=[255,10,20,255]) self.plot.addItem(self.hLine, ignoreBounds=True) self.hLine.setPos(3.3) self.sh=2; self.icg=2; self.samples=3694; self.tweak = 1 self.chan = 'AN8' self.timer = self.newTimer() self.legend = self.plot.addLegend(offset=(-10,30)) self.curveCH1 = self.addCurve(self.plot,'INPUT(%s)'%self.chan) self.autoRange() self.WidgetLayout.setAlignment(QtCore.Qt.AlignLeft) self.ControlsLayout.setAlignment(QtCore.Qt.AlignRight) self.ControlsLayout.addWidget(self.setStateIcon(I=self.I)) #Utility widgets self.I.set_pv1(4) #Control widgets a1={'TITLE':'SH','MIN':2,'MAX':10,'FUNC':self.set_timebase,'UNITS':'S','TOOLTIP':'Set SH pulse width, and timebase'} self.ControlsLayout.addWidget(self.dialIcon(**a1)) self.set_timebase(2) a1={'TITLE':'Average','MIN':1,'MAX':5,'FUNC':self.set_tweak,'UNITS':' times','TOOLTIP':'Average samples before displaying'} T = self.dialIcon(**a1) T.dial.setPageStep(1) T.dial.setValue(1) self.ControlsLayout.addWidget(T) a1={'TITLE':'ICG','MIN':1,'MAX':65000,'FUNC':self.set_icg,'UNITS':'S','TOOLTIP':'Set ICG'} self.WidgetLayout.addWidget(self.dialIcon(**a1)) self.I.set_sine2(1000) self.running=True self.fit = False self.timer.singleShot(100,self.run) self.Y = np.zeros(3648) self.num = 0
def __init__(self, parent=None, **kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) from PSL.analyticsClass import analyticsClass self.math = analyticsClass() self.I = kwargs.get('I', None) self.I.configure_trigger(0, 'MIC', 0, prescaler=1) self.setWindowTitle(params.get('name', '').replace('\n', ' ')) self.prescalerValue = 0 self.plot = self.add2DPlot(self.plot_area, enableMenu=False) self.enableCrossHairs(self.plot) labelStyle = {'color': 'rgb(255,255,255)', 'font-size': '11pt'} self.plot.setLabel('left', 'V (CH1)', units='V', **labelStyle) self.plot.setLabel('bottom', 'Time', units='S', **labelStyle) self.tg = 5. self.max_samples = 2000 self.samples = self.max_samples self.plot.setLimits(yMax=3.3, yMin=-3.3, xMin=0, xMax=self.samples * self.tg * 1e-6) self.plot.setYRange(-3.3, 3.3) self.timer = self.newTimer() self.legend = self.plot.addLegend(offset=(-10, 30)) self.curve1 = self.addCurve(self.plot, 'INPUT (MIC)') self.curve2 = self.addCurve(self.plot, 'INPUT (CH2)') self.WidgetLayout.setAlignment(QtCore.Qt.AlignLeft) # Control widgets self.w1 = self.addW1(self.I) self.WidgetLayout.addWidget(self.w1) self.M1 = self.displayIcon( TITLE='CH2 Analysis', TOOLTIP="Displays amplitude, frequency of CH2 input") self.WidgetLayout.addWidget(self.M1) self.M2 = self.displayIcon( TITLE='MIC Analysis', TOOLTIP="Displays amplitude, frequency of MIC input") self.WidgetLayout.addWidget(self.M2) # self.dial = self.dialIcon(TITLE = 'F center',MIN=10,MAX=10000,FUNC=lambda x:x,TOOLTIP="Displays amplitude, frequency of MIC input") # self.WidgetLayout.addWidget(self.dial) self.addPauseButton(self.bottomLayout, self.pause) self.running = True self.paused = False self.timer.singleShot(100, self.run)
def __init__(self, parent=None,**kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) from PSL.analyticsClass import analyticsClass self.math = analyticsClass() self.I=kwargs.get('I',None) self.I.set_pv3(2.0) self.setWindowTitle(params.get('name','').replace('\n',' ') ) self.prescalerValue=0 self.plot=self.add2DPlot(self.plot_area,enableMenu=False) self.enableCrossHairs(self.plot) labelStyle = {'color': 'rgb(255,255,255)', 'font-size': '11pt'} self.plot.setLabel('left','V (CH1)', units='V',**labelStyle) self.plot.setLabel('bottom','Time', units='S',**labelStyle) self.I.select_range('CH1',4) self.I.select_range('CH2',4) self.p2=self.enableRightAxis(self.plot) self.plot.getAxis('right').setLabel('V (CH2)', units='V', color='#ff0000') self.I.configure_trigger(0,'CH1',0,prescaler = self.prescalerValue) self.tg=5. self.max_samples=2000; self.samples = self.max_samples self.plot.setLimits(yMax=4,yMin=-4,xMin=0,xMax=self.samples*self.tg*1e-6);self.plot.setYRange(-4,4) self.p2.setLimits(yMax=4,yMin=-4); self.p2.setYRange(-4,4) self.timer = self.newTimer() self.sinewidget = self.addW1(self.I) self.WidgetLayout.addWidget(self.sinewidget) self.sinewidget.dial.setValue(500) self.legend = self.plot.addLegend(offset=(-10,-30)) self.curve1 = self.addCurve(self.plot,'Voltage Drop across R(CH1)') self.curve2 = self.addCurve(self.p2,'Original Voltage (CH2)',pen=(255,0,0)) self.legend.addItem(self.curve2,'Original Voltage (CH2)') self.WidgetLayout.setAlignment(QtCore.Qt.AlignLeft) #Control widgets self.res = self.spinIcon(TITLE = 'Resistance(R)',MIN=100,MAX=20000,TOOLTIP="Enter the value of the resistor you connected between CH1 and GND",FUNC=lambda x:x,UNITS=u"\u03A9") self.res.spinBox.setValue(10000) self.WidgetLayout.addWidget(self.res) self.meterCH1 = self.displayIcon(TITLE = 'Voltages',TOOLTIP="Displays RMS voltage of CH1 and CH2") self.WidgetLayout.addWidget(self.meterCH1) self.meterCH2 = self.displayIcon(TITLE = 'Current and resistance',TOOLTIP="Displays current flow") self.WidgetLayout.addWidget(self.meterCH2) self.addPauseButton(self.bottomLayout,self.pause) self.running=True self.paused=False self.timer.singleShot(100,self.run)
def __init__(self, parent=None, **kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) from PSL.analyticsClass import analyticsClass self.math = analyticsClass() self.I = kwargs.get('I', None) self.setWindowTitle(self.I.H.version_string + ' : ' + params.get('name', '').replace('\n', ' ')) self.plot = self.add2DPlot(self.plot_area, enableMenu=False) self.enableCrossHairs(self.plot) labelStyle = {'color': 'rgb(255,255,255)', 'font-size': '11pt'} self.plot.setLabel('left', 'Resistance', units=u"\u03A9", **labelStyle) self.plot.setLabel('bottom', 'Time', units='S', **labelStyle) self.tg = 30. self.max_samples = 1000 self.samples = self.max_samples self.plot.setLimits(yMax=50e3, yMin=0, xMin=0, xMax=1e-6 * self.tg * self.samples) self.plot.setYRange(1e3, 30e3) self.timer = self.newTimer() self.legend = self.plot.addLegend(offset=(-10, 30)) self.curve1 = self.addCurve(self.plot, 'RESISTANCE (SEN)') self.WidgetLayout.setAlignment(QtCore.Qt.AlignLeft) # Control widgets self.sqr = self.dialIcon( TITLE='SQR1', MIN=10, MAX=300, FUNC=self.I.sqr1, UNITS='Hz', TOOLTIP= 'Frequency of square wave generator #1\n0 for switched off, Max for On state' ) self.WidgetLayout.addWidget(self.sqr) self.voltmeter = self.displayIcon(TITLE='Average Resistance', UNITS=u"\u03A9", TOOLTIP='') self.WidgetLayout.addWidget(self.voltmeter) self.addPauseButton(self.bottomLayout, self.pause) self.running = True self.paused = False self.timer.singleShot(100, self.run)
def __init__(self, parent=None,**kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) self.I=kwargs.get('I',None) self.setWindowTitle(self.I.H.version_string+' : '+params.get('name','').replace('\n',' ') ) self.plot1=self.add2DPlot(self.plot_area) labelStyle = {'color': 'rgb(255,255,255)', 'font-size': '11pt'} self.plot1.setLabel('bottom','Time -->', units='S',**labelStyle) self.p2=self.enableRightAxis(self.plot1) self.plot1.getAxis('left').setLabel('Vc -->>', color='#ffffff') self.plot1.getAxis('right').setLabel('I -->>', units='A', color='#00ffff') self.I.set_gain('CH1',1) self.I.set_gain('CH2',1) self.plot1.setYRange(-8.5,8.5) self.p2.setYRange(-8.5/self.resistance.value(),8.5/self.resistance.value()) from PSL.analyticsClass import analyticsClass self.CC = analyticsClass() self.I.configure_trigger(0,'CH1',0) self.tg=20 self.max_samples = 2000 self.samples = 2000 self.prescaler = 0 self.timer = QtCore.QTimer() self.curveCH1 = self.addCurve(self.plot1,'VC(CH1-CH2)') self.curveCH2 = self.addCurve(self.p2,'Current',pen=[0,255,255]) self.WidgetLayout.setAlignment(QtCore.Qt.AlignLeft) self.fdial = self.addW1(self.I); self.WidgetLayout.addWidget(self.fdial) self.fdial.dial.setValue(100) self.WidgetLayout.addWidget(self.addTimebase(self.I,self.set_timebase)) self.timer.singleShot(100,self.run) self.resultsTable.setRowCount(50) self.resultsTable.setColumnCount(4) self.resultsTable.setHorizontalHeaderLabels(['F','Vc','I (mA)','Xc = Vc/I']) self.acquireParams = False self.currentRow=0 self.running=True self.plotAButton.setText('F vs Xc') self.plotBButton.setText('F vs 1/Xc') self.splitter.setSizes([10,1000])
def __init__(self, parent=None,**kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) self.I=kwargs.get('I',None) self.setWindowTitle(self.I.H.version_string+' : '+params.get('name','').replace('\n',' ') ) from PSL.analyticsClass import analyticsClass self.math = analyticsClass() self.prescalerValue=0 self.plot=self.add2DPlot(self.plot_area,enableMenu=False) self.enableCrossHairs(self.plot,[]) labelStyle = {'color': 'rgb(255,255,255)', 'font-size': '11pt'} self.plot.setLabel('left','Voltage -->', units='V',**labelStyle) self.plot.setLabel('bottom','Time -->', units='S',**labelStyle) self.plot.setYRange(-8.5,8.5) self.I.set_gain('CH1',1) self.I.set_gain('CH2',1) self.plot.setLimits(yMax=8,yMin=-8,xMin=0,xMax=4e-3) self.I.configure_trigger(0,'CH1',0,prescaler = self.prescalerValue) self.tg=2 self.max_samples=2000 self.samples = self.max_samples self.timer = QtCore.QTimer() self.legend = self.plot.addLegend(offset=(-10,30)) self.curveCH1 = self.addCurve(self.plot,'INPUT(CH1)') self.curveCH2 = self.addCurve(self.plot,'OUTPUT(CH2)') self.WidgetLayout.setAlignment(QtCore.Qt.AlignLeft) #Utility widgets a1={'TITLE':'Wave 1','MIN':10,'MAX':5000,'FUNC':self.I.set_sine1,'TYPE':'dial','UNITS':'Hz','TOOLTIP':'Frequency of waveform generator #1'} self.sinewidget = self.dialAndDoubleSpinIcon(**a1) self.WidgetLayout.addWidget(self.sinewidget) self.sinewidget.dial.setValue(500) a1={'TITLE':'Measure Gain','FUNC':self.measureGain,'TOOLTIP':'Curve fit the traces and find the gain of the circuit'} self.ampGain = self.buttonIcon(**a1) self.WidgetLayout.addWidget(self.ampGain) #Control widgets a1={'TITLE':'TIMEBASE','MIN':0,'MAX':9,'FUNC':self.set_timebase,'UNITS':'S','TOOLTIP':'Set Timebase of the oscilloscope'} self.ControlsLayout.addWidget(self.dialIcon(**a1)) self.ControlsLayout.addWidget(self.gainIconCombined(FUNC=self.I.set_gain,LINK=self.gainChanged)) self.running=True self.fit = False self.timer.singleShot(100,self.run)
def __init__(self, parent=None,**kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) self.I=kwargs.get('I',None) self.setWindowTitle(self.I.H.version_string+' : '+params.get('name','').replace('\n',' ') ) from PSL.analyticsClass import analyticsClass self.math = analyticsClass() self.prescalerValue=0 self.plot=self.add2DPlot(self.plot_area,enableMenu=False) self.enableCrossHairs(self.plot,[]) labelStyle = {'color': 'rgb(255,255,255)', 'font-size': '11pt'} self.plot.setLabel('left','Voltage -->', units='V',**labelStyle) self.plot.setLabel('bottom','Time -->', units='S',**labelStyle) self.plot.setYRange(-8.5,8.5) self.I.set_gain('CH1',1) self.I.set_gain('CH2',1) self.I.set_pv2(0);self.I.set_pv3(0) self.plot.setLimits(yMax=8,yMin=-8,xMin=0,xMax=4e-3) self.I.configure_trigger(0,'CH1',0,prescaler = self.prescalerValue) self.tg=2 self.max_samples=2000 self.samples = self.max_samples self.timer = QtCore.QTimer() self.legend = self.plot.addLegend(offset=(-10,30)) self.curve1 = self.addCurve(self.plot,'INPUT 1(CH2)') self.curve2 = self.addCurve(self.plot,'INPUT 2(CH3)') self.curve3 = self.addCurve(self.plot,'OUTPUT (CH1)') self.WidgetLayout.setAlignment(QtCore.Qt.AlignLeft) #Utility widgets #Widgets related to power supplies PV1,PVS2,PV3,PCS self.supplySection = self.supplyWidget(self.I); self.WidgetLayout.addWidget(self.supplySection) #Widgets related to Analog Waveform generators self.sineSection = self.sineWidget(self.I); self.WidgetLayout.addWidget(self.sineSection) #Control widgets a1={'TITLE':'TIMEBASE','MIN':0,'MAX':9,'FUNC':self.set_timebase,'UNITS':'S','TOOLTIP':'Set Timebase of the oscilloscope'} self.ControlsLayout.addWidget(self.dialIcon(**a1)) self.ControlsLayout.addWidget(self.gainIconCombined(FUNC=self.I.set_gain,LINK=self.gainChanged)) self.running=True self.timer.singleShot(100,self.run)
def __init__(self, parent=None, **kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) self.I = kwargs.get('I', None) self.setWindowTitle(self.I.H.version_string + ' : ' + params.get('name', '').replace('\n', ' ')) from PSL.analyticsClass import analyticsClass self.math = analyticsClass() self.prescalerValue = 0 self.plot = self.add2DPlot(self.plot_area, enableMenu=False) self.enableCrossHairs(self.plot) labelStyle = {'color': 'rgb(255,255,255)', 'font-size': '11pt'} self.plot.setLabel('left', 'Voltage', units='V', **labelStyle) self.plot.setLabel('bottom', 'Time', units='S', **labelStyle) self.plot.setYRange(-8.5, 8.5) self.I.set_gain('CH1', 1) self.I.set_gain('CH2', 1) self.I.set_pv2(0) self.I.set_pv3(0) self.plot.setLimits(yMax=8, yMin=-8, xMin=0, xMax=4e-3) self.I.configure_trigger(0, 'CH1', 0, prescaler=1) self.tg = 50. self.max_samples = 2000 self.samples = self.max_samples self.autoRange() self.timer = self.newTimer() self.legend = self.plot.addLegend(offset=(-10, 30)) self.curve1 = self.addCurve(self.plot, 'INPUT (CH1)') self.WidgetLayout.setAlignment(QtCore.Qt.AlignLeft) #Control widgets self.voltmeter = self.displayIcon( TITLE='CH1 Voltage (Instantaneous)', UNITS='V', TOOLTIP='Displays instantaneous voltage on CH1 using the voltmeter' ) self.WidgetLayout.addWidget(self.voltmeter) self.fitmeter = self.displayIcon( TITLE='CH1 Fitted data', UNITS='V', TOOLTIP='Displays the RMS amplitude and frequency of CH1') self.WidgetLayout.addWidget(self.fitmeter) self.addPauseButton(self.bottomLayout, self.pause) self.running = True self.paused = False self.timer.singleShot(100, self.run)
def __init__(self, parent=None,**kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) self.I=kwargs.get('I',None) self.setWindowTitle(self.I.H.version_string+' : '+params.get('name','').replace('\n',' ') ) from PSL.analyticsClass import analyticsClass self.math = analyticsClass() self.prescalerValue=0 self.plot=self.add2DPlot(self.plot_area,enableMenu=False) labelStyle = {'color': 'rgb(255,255,255)', 'font-size': '11pt'} self.plot.setLabel('left','Voltage -->', units='V',**labelStyle) self.plot.setLabel('bottom','Time -->', units='S',**labelStyle) self.plot.setYRange(-8.5,8.5) self.I.set_gain('CH1',1) self.I.set_gain('CH2',1) self.I.set_pv2(0);self.I.set_pv3(0) self.plot.setLimits(yMax=8,yMin=-8,xMin=0,xMax=4e-3) self.I.configure_trigger(0,'CH1',0,prescaler = self.prescalerValue) self.tg=1. self.max_samples=5000 self.samples = self.max_samples self.timer = self.newTimer() self.legend = self.plot.addLegend(offset=(-10,30)) self.curve1 = self.addCurve(self.plot,'INPUT (CH1)') self.curve2 = self.addCurve(self.plot,'INPUT (CH2)') self.WidgetLayout.setAlignment(QtCore.Qt.AlignLeft) #Control widgets a1={'TITLE':'TIMEBASE','MIN':0,'MAX':9,'FUNC':self.set_timebase,'UNITS':'S','TOOLTIP':'Set Timebase of the oscilloscope'} self.WidgetLayout.addWidget(self.dialIcon(**a1)) self.WidgetLayout.addWidget(self.gainIconCombined(FUNC=self.I.set_gain,LINK=self.gainChanged)) a1={'TITLE':'Analyse CH1','FUNC':self.measureFreq1,'TOOLTIP':'Curve fit the trace from CH1 and find the frequency'} self.ampGain1 = self.buttonIcon(**a1) self.WidgetLayout.addWidget(self.ampGain1) a1={'TITLE':'Analyse CH2','FUNC':self.measureFreq2,'TOOLTIP':'Curve fit the trace from CH2 and find the frequency'} self.ampGain2 = self.buttonIcon(**a1) self.WidgetLayout.addWidget(self.ampGain2) self.running=True self.fit1 = False self.fit2 = False self.timer.singleShot(100,self.run)
def __init__(self, parent=None,**kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) from PSL.analyticsClass import analyticsClass self.math = analyticsClass() self.I=kwargs.get('I',None) self.setWindowTitle(params.get('name','').replace('\n',' ') ) self.prescalerValue=0 self.plot=self.add2DPlot(self.plot_area,enableMenu=False) self.enableCrossHairs(self.plot) labelStyle = {'color': 'rgb(255,255,255)', 'font-size': '11pt'} self.plot.setLabel('left','V (CH1)', units='V',**labelStyle) self.plot.setLabel('bottom','Time', units='S',**labelStyle) self.plotF=self.add2DPlot(self.plot_area,enableMenu=False) self.plotF.setLabel('bottom', 'Frequency', units='Hz') self.plotF.autoRange();self.plotF.getPlotItem().setMouseEnabled(True,False) self.tg=20. self.max_samples=5000; self.samples = self.max_samples self.plot.setLimits(yMax=3,yMin=-3,xMin=0,xMax=self.samples*self.tg*1e-6);self.plot.setYRange(-3,3) self.plotF.setLimits(yMax=3,yMin=-0.001,xMin=70,xMax=20e3);self.plotF.setYRange(-0.001,3) self.timer = self.newTimer() self.legend = self.plot.addLegend(offset=(-10,30)) self.curve1 = self.addCurve(self.plot,'INPUT (MIC)') self.curveFFT = self.addCurve(self.plotF,'Fourier Transform') self.WidgetLayout.setAlignment(QtCore.Qt.AlignLeft) #Control widgets self.w1 = self.addW1(self.I) self.WidgetLayout.addWidget(self.w1) self.w2 = self.addW2(self.I) self.WidgetLayout.addWidget(self.w2) self.voltmeterF = self.displayIcon(TITLE = 'Analysis',TOOLTIP="Displays amplitude, frequency of MIC input") self.WidgetLayout.addWidget(self.voltmeterF) #self.dial = self.dialIcon(TITLE = 'F center',MIN=10,MAX=10000,FUNC=lambda x:x,TOOLTIP="Displays amplitude, frequency of MIC input") #self.WidgetLayout.addWidget(self.dial) self.addPauseButton(self.bottomLayout,self.pause) self.running=True self.paused=False self.timer.singleShot(100,self.run)
def __init__(self, parent=None, **kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) self.I = kwargs.get('I', None) self.setWindowTitle('iPython Console : ' + self.I.H.version_string.decode("utf-8")) self.msg = QtGui.QLabel() self.statusbar.addWidget(self.msg) self.msg.setText('Hi!') self.timer = QtCore.QTimer() self.showSplash() self.updateSplash(10, 'Importing iPython Widgets...') try: from PSL_Apps.iPythonEmbed import QIPythonWidget self.updateSplash(10, 'Creating Dock Widget...') except: self.splash.finish(self) errbox = QtGui.QMessageBox() errbox.setStyleSheet('background:#fff;') print(errbox.styleSheet()) errbox.about( self, "Error", "iPython-qtconsole not found.\n Please Install the module") return self.updateSplash(10, 'Embedding IPython Widget...') # --------instantiate the iPython class------- self.ipyConsole = QIPythonWidget( customBanner="An interactive Python Console!\n") self.updateSplash(10) self.layout.addWidget(self.ipyConsole) self.updateSplash(10, 'Preparing default command dictionary...') from PSL.analyticsClass import analyticsClass self.analytics = analyticsClass() cmdDict = {"analytics": self.analytics} # if self.graphContainer1_enabled:cmdDict["graph"]=self.graph if self.I: cmdDict["I"] = self.I self.ipyConsole.printText( "Access hardware using the Instance 'I'. e.g. I.get_average_voltage('CH1')" ) self.ipyConsole.pushVariables(cmdDict) self.updateSplash(10, 'Winding up...') self.console_enabled = True self.splash.finish(self) self.updateSplash(10)
def __init__(self, parent=None,**kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) from PSL.analyticsClass import analyticsClass self.math = analyticsClass() self.I=kwargs.get('I',None) self.setWindowTitle(params.get('name','').replace('\n',' ') ) self.plot=self.add2DPlot(self.plot_area,enableMenu=False) self.enableCrossHairs(self.plot) labelStyle = {'color': 'rgb(255,255,255)', 'font-size': '11pt'} self.plot.setLabel('left','Voltage', units='V',**labelStyle) self.plot.setLabel('bottom','Time', units='S',**labelStyle) self.plot.setYRange(-8.5,8.5) self.I.set_gain('CH1',1) self.I.set_gain('CH2',1) self.tg=50. self.max_samples=2000 self.samples = self.max_samples self.plot.setLimits(yMax=8,yMin=-8,xMin=0,xMax=1e6*self.samples*self.tg) self.autoRange() self.timer = self.newTimer() self.sinewidget = self.addW1(self.I) self.WidgetLayout.addWidget(self.sinewidget) self.sinewidget.dial.setMinimum(10);self.sinewidget.dial.setMaximum(200);self.sinewidget.dial.setValue(30); self.pvwidget = self.addPV1(self.I) self.WidgetLayout.addWidget(self.pvwidget) self.pvwidget.dial.setValue(2048) self.legend = self.plot.addLegend(offset=(-10,30)) self.curve1 = self.addCurve(self.plot,'INPUT (CH1)') self.curve2 = self.addCurve(self.plot,'INPUT (CH2)') self.WidgetLayout.setAlignment(QtCore.Qt.AlignLeft) #Control widgets self.voltmeter = self.displayIcon(TITLE = 'CH1 Voltage',UNITS='V',TOOLTIP='Displays instantaneous voltage on CH1 using the voltmeter') self.WidgetLayout.addWidget(self.voltmeter) self.voltmeter2 = self.displayIcon(TITLE = 'CH2 Voltage',UNITS='V',TOOLTIP='Displays instantaneous voltage on CH1 using the voltmeter') self.WidgetLayout.addWidget(self.voltmeter2) self.addPauseButton(self.bottomLayout,self.pause) self.running=True self.paused=False self.timer.singleShot(100,self.run)
def __init__(self, parent=None, **kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) self.I = kwargs.get('I', None) self.IMU = MPU6050.connect(self.I.I2C) from PSL.analyticsClass import analyticsClass self.CC = analyticsClass() self.setWindowTitle(self.I.H.version_string + ' : ' + params.get('name', '').replace('\n', ' ')) self.plot1 = self.add2DPlot(self.plot_area) labelStyle = {'color': 'rgb(255,255,255)', 'font-size': '11pt'} self.plot1.setLabel('left', 'Acceleration -->', units='V', **labelStyle) self.plot1.setLabel('bottom', 'Time -->', units='S', **labelStyle) self.tg = 2000 self.samples = 1000 self.tgLabel.setText(str(self.samples * self.tg * 1e-3) + 'mS') self.curveGx = self.addCurve(self.plot1, 'Gx') self.curveGy = self.addCurve(self.plot1, 'Gy') self.curveGz = self.addCurve(self.plot1, 'Gz') self.plot2 = self.addAxis(self.plot1) self.curveAx = self.addCurve(self.plot2, 'Ax') self.curveAy = self.addCurve(self.plot2, 'Ay') self.curveAz = self.addCurve(self.plot2, 'Az') self.curves = [ self.curveAx, self.curveAy, self.curveAz, self.curveGx, self.curveGy, self.curveGz ] self.curveNames = ['Ax', 'Ay', 'Az', 'Gx', 'Gy', 'Gz'] self.legend = self.plot1.addLegend(offset=(-10, 30)) for a in range(6): self.legend.addItem(self.curves[a], self.curveNames[a]) self.datasets = [[], [], [], [], [], []] self.looptimer = QtCore.QTimer() self.region = pg.LinearRegionItem( [self.tg * 50 * 1e-6, self.tg * 800 * 1e-6]) self.region.setZValue(-10) self.plot1.addItem(self.region) self.lognum = 0 self.msg.setText("Fitting fn :\noff+amp*exp(-damp*x)*sin(x*freq+ph)") self.Params = []
def __init__(self, parent=None,**kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) self.I=kwargs.get('I',None) self.I.set_gain('CH1',2) self.I.set_gain('CH2',2) self.setWindowTitle(self.I.H.version_string+' : '+params.get('name','').replace('\n',' ') ) self.plot1=self.add2DPlot(self.plot_area) self.plot2=self.add2DPlot(self.plot_area) self.legend = self.plot1.addLegend(offset=(-10,30)) self.curve1 = self.addCurve(self.plot1,'INPUT (CH2)') self.curve2 = self.addCurve(self.plot1,'OUTPUT(MIC)') self.plot2.getAxis('left').setLabel('Amplitude', color='#ffffff') self.plot1.getAxis('bottom').setLabel('Time',units='S' ,color='#ffffff') self.plot2.getAxis('bottom').setLabel('Frequency',units='Hz', color='#ffffff') self.curveAmp = self.addCurve(self.plot2,'AMPLITUDE',pen=[255,255,255]) self.samples = 5000 self.X=[] self.Y=[] self.curves=[] self.curveLabels=[] from PSL.analyticsClass import analyticsClass self.CC = analyticsClass() self.I.configure_trigger(1,'CH2',0) self.I.set_sine1(2) self.I.set_gain('CH2',2) self.startFreq.setValue(3000) self.stopFreq.setValue(4000) self.freqs=[] self.amps=[] self.dP=[] self.STARTFRQ=self.startFreq.value() self.ENDFRQ=self.stopFreq.value() self.STEPFRQ=self.stepFreq.value() self.loop=None self.plot2.setXRange(self.STARTFRQ,self.ENDFRQ) self.plot2.setYRange(0,1.) self.plot1.setLimits(xMin = 0,yMin=-8,yMax=8) self.running = False
def __init__(self, parent=None,**kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) self.I=kwargs.get('I',None) self.setWindowTitle(self.I.H.version_string+' : '+params.get('name','').replace('\n',' ') ) from PSL.analyticsClass import analyticsClass self.math = analyticsClass() self.prescalerValue=0 self.plot=self.add2DPlot(self.plot_area,enableMenu=False) #self.enableCrossHairs(self.plot,[]) labelStyle = {'color': 'rgb(255,255,255)', 'font-size': '11pt'} self.plot.setLabel('left','V (CH1)', units='V',**labelStyle) self.plot.setLabel('bottom','Time', units='S',**labelStyle) self.plot.setYRange(-8.5,8.5) self.tg=0.5 self.max_samples=10000 self.samples = self.max_samples self.timer = QtCore.QTimer() self.legend = self.plot.addLegend(offset=(-10,30)) self.curveCH1 = self.addCurve(self.plot,'RAMP In(CH1)') self.autoRange() self.WidgetLayout.setAlignment(QtCore.Qt.AlignLeft) self.ControlsLayout.setAlignment(QtCore.Qt.AlignRight) a1={'TITLE':'Acquire Data','FUNC':self.run,'TOOLTIP':'Sets SQR1 to HIGH, and immediately records the ramp'} self.ampGain = self.buttonIcon(**a1) self.WidgetLayout.addWidget(self.ampGain) self.WidgetLayout.addWidget(self.addSQR1(self.I)) #Control widgets a1={'TITLE':'TIMEBASE','MIN':0,'MAX':9,'FUNC':self.set_timebase,'UNITS':'S','TOOLTIP':'Set Timebase of the oscilloscope'} self.ControlsLayout.addWidget(self.dialIcon(**a1)) G = self.gainIcon(FUNC=self.I.set_gain,LINK=self.gainChanged) self.ControlsLayout.addWidget(G) G.g1.setCurrentIndex(1);G.g2.setEnabled(False) self.running=True self.fit = False
def __init__(self, parent=None,**kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) from PSL.analyticsClass import analyticsClass self.math = analyticsClass() self.I=kwargs.get('I',None) self.I.configure_trigger(0,'MIC',0,prescaler = 1) self.setWindowTitle(params.get('name','').replace('\n',' ') ) self.prescalerValue=0 self.plot=self.add2DPlot(self.plot_area,enableMenu=False) self.enableCrossHairs(self.plot) labelStyle = {'color': 'rgb(255,255,255)', 'font-size': '11pt'} self.plot.setLabel('left','V (CH1)', units='V',**labelStyle) self.plot.setLabel('bottom','Time', units='S',**labelStyle) self.tg=5. self.max_samples=2000; self.samples = self.max_samples self.plot.setLimits(yMax=3.3,yMin=-3.3,xMin=0,xMax=self.samples*self.tg*1e-6);self.plot.setYRange(-3.3,3.3) self.timer = self.newTimer() self.legend = self.plot.addLegend(offset=(-10,30)) self.curve1 = self.addCurve(self.plot,'INPUT (MIC)') self.curve2 = self.addCurve(self.plot,'INPUT (CH2)') self.WidgetLayout.setAlignment(QtCore.Qt.AlignLeft) #Control widgets self.w1 = self.addW1(self.I) self.WidgetLayout.addWidget(self.w1) self.M1 = self.displayIcon(TITLE = 'CH2 Analysis',TOOLTIP="Displays amplitude, frequency of CH2 input") self.WidgetLayout.addWidget(self.M1) self.M2 = self.displayIcon(TITLE = 'MIC Analysis',TOOLTIP="Displays amplitude, frequency of MIC input") self.WidgetLayout.addWidget(self.M2) #self.dial = self.dialIcon(TITLE = 'F center',MIN=10,MAX=10000,FUNC=lambda x:x,TOOLTIP="Displays amplitude, frequency of MIC input") #self.WidgetLayout.addWidget(self.dial) self.addPauseButton(self.bottomLayout,self.pause) self.running=True self.paused=False self.timer.singleShot(100,self.run)
def __init__(self, parent=None,**kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) self.I=kwargs.get('I',None) self.setWindowTitle(self.I.H.version_string+' : '+params.get('name','').replace('\n',' ') ) from PSL.analyticsClass import analyticsClass self.math = analyticsClass() self.bins=200 self.plot=self.add2DPlot(self.plot_area,enableMenu=False) labelStyle = {'color': 'rgb(255,255,255)', 'font-size': '11pt'} self.plot.setLabel('left','Points', units='',**labelStyle) self.plot.setLabel('bottom','Voltage', units='V',**labelStyle) self.plot.enableAutoRange(True,True) self.I.set_gain('CH1',1) self.plot.setLimits(xMin=-6,xMax=6) self.timer = self.newTimer() self.legend = self.plot.addLegend(offset=(-10,30)) self.curve1 = self.addCurve(self.plot,'INPUT (CH1)') #Control widgets self.WidgetLayout.addWidget(self.dualButtonIcon(A='START',B='STOP',FUNCA=self.start,FUNCB=self.stop,TITLE='sampling')) self.WidgetLayout.addWidget(self.dualButtonIcon(A='Sinusoidal',B='Triangular',FUNCA=self.set_sine,FUNCB=self.set_tria,TITLE='W1 type')) self.WidgetLayout.addWidget(self.simpleButtonIcon(FUNC=self.clear,TITLE='CLEAR\nPLOT')) self.binIcon = self.dialIcon(FUNC=self.setBins,TITLE='# of Bins',MIN=10,MAX=300) self.binIcon.dial.setValue(200) self.WidgetLayout.addWidget(self.binIcon) self.W1 = self.addWG(self.I,{'type':'W1','name':'SINE1'},self.ControlsLayout) self.SQR1 =self.addWG(self.I,{'type':'SQR1','name':'SQR1'},self.ControlsLayout) self.W1.dial.setMinimum(70) self.W1.dial.setMaximum(250) self.SQR1.dial.setMinimum(20) self.SQR1.dial.setMaximum(150) self.running=True self.vals=[] self.timer.timeout.connect(self.run)
def __init__(self, parent=None, **kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) self.I = kwargs.get('I', None) self.setWindowTitle(self.I.H.version_string + ' : ' + params.get('name', '').replace('\n', ' ')) from PSL.analyticsClass import analyticsClass self.math = analyticsClass() self.plot = self.add2DPlot(self.plot_area, enableMenu=False) self.plot.setMouseEnabled(False, True) labelStyle = {'color': 'rgb(255,255,255)', 'font-size': '11pt'} self.plot.setLabel('left', 'Voltage', units='V', **labelStyle) self.plot.setLabel('bottom', 'Time', units='S', **labelStyle) self.plot.setYRange(-.2, 5) self.plot.setLimits(yMax=8, yMin=-0.2) self.plot.getViewBox().enableAutoRange(self.plot.getViewBox().XAxis) self.tg = 100 self.samples = 1000 self.legend = self.plot.addLegend(offset=(-10, 30)) self.curve1 = self.addCurve(self.plot, 'Voltage(CH1)') self.WidgetLayout.setAlignment(QtCore.Qt.AlignLeft) self.WidgetLayout.addWidget( self.simpleButtonIcon(TITLE='START', FUNC=self.start)) self.WidgetLayout.addWidget( self.simpleButtonIcon(TITLE='STOP', FUNC=self.stop)) self.ControlsLayout.addWidget( self.wideButtonIcon(TITLE='Voltage(CH1)', FUNC=self.get_voltage, UNITS='V')) self.addPauseButton(self.bottomLayout, self.pause) self.paused = False self.running = True self.timer = self.newTimer() self.timer.timeout.connect(self.run_np) self.num = 0 self.I.set_state(SQR1=1)
def __init__(self, parent=None,**kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) self.I=kwargs.get('I',None) self.setWindowTitle(self.I.H.version_string+' : '+params.get('name','').replace('\n',' ') ) from PSL.analyticsClass import analyticsClass self.math = analyticsClass() self.prescalerValue=0 self.plot=self.add2DPlot(self.plot_area,enableMenu=False) self.enableCrossHairs(self.plot) labelStyle = {'color': 'rgb(255,255,255)', 'font-size': '11pt'} self.plot.setLabel('left','Voltage', units='V',**labelStyle) self.plot.setLabel('bottom','Time', units='S',**labelStyle) self.plot.setYRange(-8.5,8.5) self.I.set_gain('CH1',1) self.I.set_gain('CH2',1) self.I.set_pv2(0);self.I.set_pv3(0) self.plot.setLimits(yMax=8,yMin=-8,xMin=0,xMax=4e-3) self.I.configure_trigger(0,'CH1',0,prescaler = 1) self.tg=50.; self.max_samples=2000; self.samples = self.max_samples; self.autoRange() self.timer = self.newTimer() self.legend = self.plot.addLegend(offset=(-10,30)) self.curve1 = self.addCurve(self.plot,'INPUT (CH1)') self.WidgetLayout.setAlignment(QtCore.Qt.AlignLeft) #Control widgets self.voltmeter = self.displayIcon(TITLE = 'CH1 Voltage (Instantaneous)',UNITS='V',TOOLTIP='Displays instantaneous voltage on CH1 using the voltmeter') self.WidgetLayout.addWidget(self.voltmeter) self.fitmeter = self.displayIcon(TITLE = 'CH1 Fitted data',UNITS='V',TOOLTIP='Displays the RMS amplitude and frequency of CH1') self.WidgetLayout.addWidget(self.fitmeter) self.addPauseButton(self.bottomLayout,self.pause) self.running=True self.paused=False self.timer.singleShot(100,self.run)
def __init__(self, parent=None,**kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) self.I=kwargs.get('I',None) self.IMU = MPU6050.connect(self.I.I2C) from PSL.analyticsClass import analyticsClass self.CC = analyticsClass() self.setWindowTitle(self.I.H.version_string+' : '+params.get('name','').replace('\n',' ') ) self.plot1=self.add2DPlot(self.plot_area) labelStyle = {'color': 'rgb(255,255,255)', 'font-size': '11pt'} self.plot1.setLabel('left','Acceleration -->', units='V',**labelStyle) self.plot1.setLabel('bottom','Time -->', units='S',**labelStyle) self.tg=2000 self.samples = 1000 self.tgLabel.setText(str(self.samples*self.tg*1e-3)+'mS') self.curveGx = self.addCurve(self.plot1,'Gx') self.curveGy = self.addCurve(self.plot1,'Gy') self.curveGz = self.addCurve(self.plot1,'Gz') self.plot2 = self.addAxis(self.plot1) self.curveAx = self.addCurve(self.plot2,'Ax') self.curveAy = self.addCurve(self.plot2,'Ay') self.curveAz = self.addCurve(self.plot2,'Az') self.curves = [self.curveAx,self.curveAy,self.curveAz,self.curveGx,self.curveGy,self.curveGz] self.curveNames=['Ax','Ay','Az','Gx','Gy','Gz'] self.legend=self.plot1.addLegend(offset=(-10,30)) for a in range(6): self.legend.addItem(self.curves[a],self.curveNames[a]) self.datasets = [[],[],[],[],[],[]] self.looptimer=QtCore.QTimer() self.region = pg.LinearRegionItem([self.tg*50*1e-6,self.tg*800*1e-6]) self.region.setZValue(-10) self.plot1.addItem(self.region) self.lognum=0 self.msg.setText("Fitting fn :\noff+amp*exp(-damp*x)*sin(x*freq+ph)") self.Params=[]
def __init__(self, parent=None, **kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) self.I = kwargs.get('I', None) self.CC = analyticsClass() self.setWindowTitle(self.I.H.version_string + ' : ' + params.get('name', '').replace('\n', ' ')) self.plot = self.add2DPlot(self.plot_area) labelStyle = {'color': 'rgb(255,255,255)', 'font-size': '11pt'} self.plot.setLabel('left', 'Voltage -->', units='V', **labelStyle) self.plot.setLabel('bottom', 'Time -->', units='S', **labelStyle) self.plot.setYRange(-8.5, 8.5) self.tg = 100 self.tgLabel.setText('total time: ' + str(5000 * self.tg * 1e-3) + 'mS') self.x = [] self.CParams = [0, 0, 0, 0, 0] self.FitTable.setHorizontalHeaderLabels( ['Amp', 'Freq', 'Phase', 'Offset', 'Damping']) for a in range(5): item = QtGui.QTableWidgetItem() self.FitTable.setItem(0, a, item) item.setText('Nil') self.curveCH1 = self.addCurve(self.plot, 'CH3') self.CH1Fit = self.addCurve(self.plot, 'CH3 Fit') self.region = pg.LinearRegionItem( [self.tg * 50 * 1e-6, self.tg * 800 * 1e-6]) self.region.setZValue(-10) self.plot.addItem(self.region) self.msg.setText("Function:offset+A*exp(-damp*x)*sin(x*freq+ph)") self.running = True self.Params = [] self.looptimer = QtCore.QTimer() self.looptimer.timeout.connect(self.updateProgress) self.I.set_w1(1)
def __init__(self, parent=None,**kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) self.I=kwargs.get('I',None) self.setWindowTitle('iPython Console : '+self.I.H.version_string.decode("utf-8")) self.msg = QtGui.QLabel() self.statusbar.addWidget(self.msg) self.msg.setText('Hi!') self.timer = QtCore.QTimer() self.showSplash();self.updateSplash(10,'Importing iPython Widgets...') try: from PSL_Apps.iPythonEmbed import QIPythonWidget self.updateSplash(10,'Creating Dock Widget...') except: self.splash.finish(self); errbox = QtGui.QMessageBox() errbox.setStyleSheet('background:#fff;') print (errbox.styleSheet()) errbox.about(self, "Error", "iPython-qtconsole not found.\n Please Install the module") return self.updateSplash(10,'Embedding IPython Widget...') #--------instantiate the iPython class------- self.ipyConsole = QIPythonWidget(customBanner="An interactive Python Console!\n");self.updateSplash(10) self.layout.addWidget(self.ipyConsole);self.updateSplash(10,'Preparing default command dictionary...') from PSL.analyticsClass import analyticsClass self.analytics = analyticsClass() cmdDict = {"analytics":self.analytics} #if self.graphContainer1_enabled:cmdDict["graph"]=self.graph if self.I : cmdDict["I"]=self.I self.ipyConsole.printText("Access hardware using the Instance 'I'. e.g. I.get_average_voltage('CH1')") self.ipyConsole.pushVariables(cmdDict);self.updateSplash(10,'Winding up...') self.console_enabled=True self.splash.finish(self);self.updateSplash(10)
def __init__(self, parent=None,**kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) self.I=kwargs.get('I',None) self.CC = analyticsClass() self.setWindowTitle(self.I.H.version_string+' : '+params.get('name','').replace('\n',' ') ) self.plot=self.add2DPlot(self.plot_area) labelStyle = {'color': 'rgb(255,255,255)', 'font-size': '11pt'} self.plot.setLabel('left','Voltage -->', units='V',**labelStyle) self.plot.setLabel('bottom','Time -->', units='S',**labelStyle) self.plot.setYRange(-8.5,8.5) self.tg=100 self.tgLabel.setText(str(5000*self.tg*1e-3)+'S') self.x=[] self.CParams=[0,0,0,0,0] self.FitTable.setHorizontalHeaderLabels(['Amp','Freq','Phase','Offset','Damping']) for a in range(5): item = QtGui.QTableWidgetItem() self.FitTable.setItem(0,a,item) item.setText('Nil') self.curveCH1 = self.addCurve(self.plot,'CH3') self.CH1Fit = self.addCurve(self.plot,'CH3 Fit') self.region = pg.LinearRegionItem([self.tg*50*1e-6,self.tg*800*1e-6]) self.region.setZValue(-10) self.plot.addItem(self.region) self.msg.setText("Function:offset+A*exp(-damp*x)*sin(x*freq+ph)") self.running=True self.Params=[] self.looptimer=QtCore.QTimer() self.looptimer.timeout.connect(self.updateProgress) self.I.set_w1(1)
def __init__(self, parent=None,**kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) self.I=kwargs.get('I',None) self.I.set_wave('W1',1e3) #1KHz test self.I.set_wave('W2',1e3) #1KHz test cap_and_pcs=self.I.read_bulk_flash(self.I.CAP_AND_PCS,8*4+5) #READY+calibration_string if cap_and_pcs[:5]=='READY': self.scalers = list(struct.unpack('8f',cap_and_pcs[5:])) else: self.displayDialog('Cap and PCS calibration invalid') self.scalers = [self.I.SOCKET_CAPACITANCE,1,0,1,1,1,1,1] from PSL.analyticsClass import analyticsClass self.math = analyticsClass() self.hexid = hex(self.I.device_id()) self.setWindowTitle(self.I.generic_name + ' : '+self.I.H.version_string.decode("utf-8")+' : '+self.hexid) for a in range(50): for b in range(3): item = QtGui.QTableWidgetItem();self.tbl.setItem(a,b,item); item.setText('') self.tests = [ ['I2C scan',[96],self.I2CScan], ['SQR-ID',1e6,self.SQRID], ['CAP_SOCK',0,self.CAP_SOCK], ['PV1-CH1','graph',self.PV1CH1], ['PV2-CH2','graph',self.PV2CH2], ['PV3-CH3','graph',self.PV3CH3], #group 2 begins ['SEN',1e3,self.SEN], ['CAP',329.5e-12,self.CAP], ['W1-CH1',1e3,self.W1CH1], ['W2-CH2',1e3,self.W2CH2], ['PCS-CH3',1e3,self.PCSCH3], ] self.group1size = 6 self.tbl.setVerticalHeaderLabels([row[0] for row in self.tests]) self.tbl.setHorizontalHeaderLabels(['Expected','read','']) self.tbl.setColumnWidth(0, 80) self.tbl.setColumnWidth(1, 150) #Nominal values for calibration constants self.PCS_SLOPE=1 self.PCS_OFFSET=0 self.socket_cap = 0 self.RESISTANCE_SCALING=1 self.CR0=1;self.CR1=1;self.CR2=1;self.CR3=1 self.G1Tests = {} self.G2Tests = {} for n in range(len(self.tests)) : self.tbl.item(n,0).setText(str(self.tests[n][1])) ################# make readback buttons ############## fn = functools.partial(self.tests[n][2],n) if n<self.group1size: self.G1Tests[self.tests[n][0]]=(fn) else: self.G2Tests[self.tests[n][0]]=(fn) item = QtGui.QPushButton();item.setText('test'); item.clicked.connect(fn) self.tbl.setCellWidget(n, 2, item) self.DACPLOT = self.add2DPlot(self.plot_area) self.WPLOT = self.add2DPlot(self.plot_area) labelStyle = {'color': 'rgb(255,255,255)', 'font-size': '11pt'} self.DACPLOT.setLabel('left','Error -->', units='V',**labelStyle) self.DACPLOT.setLabel('bottom','Actual Voltage -->', units='V',**labelStyle) self.DACPLOT.setYRange(-.02,.02) self.WPLOT.setLabel('left','Voltage -->', units='V',**labelStyle) self.WPLOT.setLabel('bottom','time -->', units='V',**labelStyle) self.WPLOT.setYRange(-3.3,3.3) self.DacCurves={} self.rebuildLegend(self.DACPLOT) for a in self.I.DAC.CHANS: self.DacCurves[a] = self.addCurve(self.DACPLOT,a) self.WCurves={} self.rebuildLegend(self.WPLOT) for a in ['W1','W2']: self.WCurves[a] = self.addCurve(self.WPLOT,a)
def __init__(self, parent=None,**kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) self.I=kwargs.get('I',None) from PSL.analyticsClass import analyticsClass self.math = analyticsClass() self.setWindowTitle(self.I.H.version_string+' : '+params.get('name','').replace('\n',' ') ) self.plot=self.add2DPlot(self.plot_area,enableMenu=False) for a in [self.C1_chan,self.edge1chan,self.edge2chan,self.C2_ID1,self.C2_ID2]: #,self.C1_trig,self.C2_trig,self.C3_trig]: a.addItems(self.I.digital_channel_names) self.C2_ID2.setCurrentIndex(1) #cross hair self.vLine = pg.InfiniteLine(angle=90, movable=True) #self.vLine.setPen(color=(135,44,64,150), width=3) self.plot.addItem(self.vLine, ignoreBounds=False) self.proxy = pg.SignalProxy(self.vLine.scene().sigMouseMoved, rateLimit=60, slot=self.readCursor) self.fps=0 self.active_dchannels=1 self.channel_states=np.array([1,0,0,0]) self.channels_in_buffer=1 self.dtrig=0 self.dchan_modes=[1,1,1,1] self.dtime=0.001 self.maxT=0 self.max_samples_per_channel=[0,self.I.MAX_SAMPLES/4,self.I.MAX_SAMPLES/4,self.I.MAX_SAMPLES/4,self.I.MAX_SAMPLES/4] self.samples=self.I.MAX_SAMPLES/4#self.sample_slider.value() self.lastTime=time.time() self.trace_colors=[(0,255,20),(255,255,0),(255,10,100),(10,255,255)] self.plot.setLabel('bottom', 'Time -->>', units='S') self.LlabelStyle = {'color': 'rgb%s'%(str(self.trace_colors[0])), 'font-size': '11pt'} self.plot.setLabel('left','CH1', units='V',**self.LlabelStyle) #self.plot.addLegend(offset=(-10,30)) self.plot.getPlotItem().setMouseEnabled(True,False) self.plot.setLimits(yMax=10,yMin=0,xMin=0) ydict = {2:'Chan 1', 4:'Chan 2', 6:'Chan 3', 8:'Chan 4'} self.plot.getAxis('left').setTicks([ydict.items()]) self.curve1 = self.addCurve(self.plot,name='1'); #self.curve1.setPen(color=self.trace_colors[0], width=1) self.curve2 = self.addCurve(self.plot,name='2'); #self.curve2.setPen(color=self.trace_colors[1], width=1) self.curve3 = self.addCurve(self.plot,name='3'); #self.curve3.setPen(color=self.trace_colors[2], width=1) self.curve4 = self.addCurve(self.plot,name='4'); #self.curve4.setPen(color=self.trace_colors[3], width=1) #self.I.sqr4_continuous(1000,.5,0.1,.5,0.3,.3,0.5,.1) self.region = pg.LinearRegionItem([0,0]) self.region.setZValue(10) self.plot.addItem(self.region) for x in range(4): item = QtGui.QTableWidgetItem();self.timingResults.setItem(x, 0, item);item.setFlags(QtCore.Qt.ItemIsSelectable|QtCore.Qt.ItemIsEnabled) item = QtGui.QTableWidgetItem();self.timingResults.setItem(x, 1, item);item.setFlags(QtCore.Qt.ItemIsSelectable|QtCore.Qt.ItemIsEnabled) self.showgrid() self.set_digital_scope_time(0) self.timer = QtCore.QTimer() self.finished=False self.timer.timeout.connect(self.update) self.timer.start(100)
def __init__(self, parent=None, **kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) from PSL.analyticsClass import analyticsClass self.math = analyticsClass() self.I = kwargs.get('I', None) self.setWindowTitle(params.get('name', '').replace('\n', ' ')) self.plot = self.add2DPlot(self.plot_area, enableMenu=False) self.enableCrossHairs(self.plot) labelStyle = {'color': 'rgb(255,255,255)', 'font-size': '11pt'} self.plot.setLabel('left', 'Voltage', units='V', **labelStyle) self.plot.setLabel('bottom', 'Time', units='S', **labelStyle) self.plot.setYRange(-8.5, 8.5) self.I.set_gain('CH1', 1) self.I.set_gain('CH2', 1) self.tg = 50. self.max_samples = 2000 self.samples = self.max_samples self.plot.setLimits(yMax=8, yMin=-8, xMin=0, xMax=1e6 * self.samples * self.tg) self.autoRange() self.timer = self.newTimer() self.sinewidget = self.addW1(self.I) self.WidgetLayout.addWidget(self.sinewidget) self.sinewidget.dial.setMinimum(10) self.sinewidget.dial.setMaximum(200) self.sinewidget.dial.setValue(30) self.pvwidget = self.addPV1(self.I) self.WidgetLayout.addWidget(self.pvwidget) self.pvwidget.dial.setValue(2048) self.legend = self.plot.addLegend(offset=(-10, 30)) self.curve1 = self.addCurve(self.plot, 'INPUT (CH1)') self.curve2 = self.addCurve(self.plot, 'INPUT (CH2)') self.WidgetLayout.setAlignment(QtCore.Qt.AlignLeft) # Control widgets self.voltmeter = self.displayIcon( TITLE='CH1 Voltage', UNITS='V', TOOLTIP='Displays instantaneous voltage on CH1 using the voltmeter' ) self.WidgetLayout.addWidget(self.voltmeter) self.voltmeter2 = self.displayIcon( TITLE='CH2 Voltage', UNITS='V', TOOLTIP='Displays instantaneous voltage on CH1 using the voltmeter' ) self.WidgetLayout.addWidget(self.voltmeter2) self.addPauseButton(self.bottomLayout, self.pause) self.running = True self.paused = False self.timer.singleShot(100, self.run)
def __init__(self, parent=None, **kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) self.I = kwargs.get('I', None) self.setWindowTitle(self.I.H.version_string + ' : ' + params.get('name', '').replace('\n', ' ')) from PSL.analyticsClass import analyticsClass self.math = analyticsClass() self.bins = 200 self.plot = self.add2DPlot(self.plot_area, enableMenu=False) labelStyle = {'color': 'rgb(255,255,255)', 'font-size': '11pt'} self.plot.setLabel('left', 'Points', units='', **labelStyle) self.plot.setLabel('bottom', 'Voltage', units='V', **labelStyle) self.plot.enableAutoRange(True, True) self.I.set_gain('CH1', 1) self.plot.setLimits(xMin=-6, xMax=6) self.timer = self.newTimer() self.legend = self.plot.addLegend(offset=(-10, 30)) self.curve1 = self.addCurve(self.plot, 'INPUT (CH1)') #Control widgets self.WidgetLayout.addWidget( self.dualButtonIcon(A='START', B='STOP', FUNCA=self.start, FUNCB=self.stop, TITLE='sampling')) self.WidgetLayout.addWidget( self.dualButtonIcon(A='Sinusoidal', B='Triangular', FUNCA=self.set_sine, FUNCB=self.set_tria, TITLE='W1 type')) self.WidgetLayout.addWidget( self.simpleButtonIcon(FUNC=self.clear, TITLE='CLEAR\nPLOT')) self.binIcon = self.dialIcon(FUNC=self.setBins, TITLE='# of Bins', MIN=10, MAX=300) self.binIcon.dial.setValue(200) self.WidgetLayout.addWidget(self.binIcon) self.W1 = self.addWG(self.I, { 'type': 'W1', 'name': 'SINE1' }, self.ControlsLayout) self.SQR1 = self.addWG(self.I, { 'type': 'SQR1', 'name': 'SQR1' }, self.ControlsLayout) self.W1.dial.setMinimum(70) self.W1.dial.setMaximum(250) self.SQR1.dial.setMinimum(20) self.SQR1.dial.setMaximum(150) self.running = True self.vals = [] self.timer.timeout.connect(self.run)
def __init__(self, parent=None, **kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) self.I = kwargs.get('I', None) from PSL.analyticsClass import analyticsClass self.math = analyticsClass() self.setWindowTitle(self.I.H.version_string + ' : ' + params.get('name', '').replace('\n', ' ')) self.trace_colors = [(0, 255, 20), (255, 0, 0), (255, 255, 100), (10, 255, 255)] self.plot = self.add2DPlot(self.plot_area, enableMenu=False) labelStyle = { 'color': 'rgb%s' % (str(self.trace_colors[1])), 'font-size': '13pt' } self.plot2 = self.addAxis(self.plot, label='CH2', **labelStyle) self.plot.getPlotItem().setMouseEnabled(True, False) self.plot2.setMouseEnabled(True, False) #self.plot.getViewBox().setMouseMode(pg.ViewBox.RectMode) self.plot.hideButtons() self.fps = 0 self.MAX_SAMPLES = 2000 self.max_samples_per_channel = [ 0, self.MAX_SAMPLES / 4, self.MAX_SAMPLES / 4, self.MAX_SAMPLES / 4, self.MAX_SAMPLES / 4 ] self.liss_win = None self.liss_ready = False self.liss_animate_arrow1 = None self.liss_animate_arrow2 = None self.liss_animate_arrow3 = None self.liss_anim1 = None self.liss_anim2 = None self.liss_anim3 = None self.samples = self.max_samples_per_channel[1] self.active_channels = 1 self.channel_states = np.array([1, 0, 0, 0]) self.channels_in_buffer = 1 self.chan1remap = 'CH1' self.ch123sa = 0 g = 1.75 self.timebase = g self.lastTime = time.time() self.highresMode = False self.plot.setLabel('bottom', 'Time', units='S') self.LlabelStyle = { 'color': 'rgb%s' % (str(self.trace_colors[0])), 'font-size': '11pt' } self.plot.setLabel('left', 'CH1', units='V', **self.LlabelStyle) labelStyle = { 'color': 'rgb%s' % (str(self.trace_colors[1])), 'font-size': '13pt' } self.plot.getAxis('right').setLabel('CH2', units='V', **labelStyle) self.plot2.setGeometry(self.plot.plotItem.vb.sceneBoundingRect()) self.plot2.linkedViewChanged(self.plot.plotItem.vb, self.plot2.XAxis) ## Handle view resizing self.plot.getViewBox().sigStateChanged.connect(self.updateViews) self.curve1 = self.addCurve(self.plot, name='CH1') self.curve1.setPen(color=self.trace_colors[0], width=2) self.curve2 = self.addCurve(self.plot2, name='CH2') self.curve2.setPen(color=self.trace_colors[1], width=2) self.curve3 = self.addCurve(self.plot, name='CH3') self.curve3.setPen(color=self.trace_colors[2], width=2) self.curve4 = self.addCurve(self.plot, name='CH4') self.curve4.setPen(color=self.trace_colors[3], width=2) self.curve_lis = self.addCurve(self.plot, name='XY') self.curve_lis.setPen(color=(255, 255, 255), width=2) self.legend = self.plot.addLegend(offset=(-10, 30)) self.legend.addItem(self.curve1, 'Chan 1') self.legend.addItem(self.curve2, 'Chan 2') self.legend.addItem(self.curve3, 'CH3') self.legend.addItem(self.curve4, 'MIC') #cross hair self.vLine = pg.InfiniteLine(angle=90, movable=False, pen=[100, 100, 200, 200]) self.plot.addItem(self.vLine, ignoreBounds=True) self.hLine = pg.InfiniteLine(angle=0, movable=False, pen=[100, 100, 200, 200]) self.plot.addItem(self.hLine, ignoreBounds=True) self.vb = self.plot.getPlotItem().vb self.proxy = pg.SignalProxy(self.plot.scene().sigMouseClicked, rateLimit=60, slot=self.mouseClicked) self.mousePoint = None self.fourierMode = False self.plot.setTitle('') self.curveF = [] for a in range(2): self.curveF.append(self.addCurve(self.plot)) self.curveF[-1].setPen(color=(255, 255, 255), width=2) self.curveFR = self.addCurve(self.plot2) #pg.PlotDataItem() #self.plot2.addItem(self.curveFR) self.curveFR.setPen(color=(255, 255, 255), width=1) self.CH1_ENABLE.setStyleSheet('background-color:rgba' + str(self.trace_colors[0])[:-1] + ',3);color:(0,0,0);') self.CH2_ENABLE.setStyleSheet('background-color:rgba' + str(self.trace_colors[1])[:-1] + ',3);color:(0,0,0);') for a in range(4): self.trigger_select_box.setItemData( a, QtGui.QColor(*self.trace_colors[a]), QtCore.Qt.BackgroundRole) self.triggerChannelName = 'CH1' self.arrow = pg.ArrowItem(pos=(0, 0), angle=0) self.plot.addItem(self.arrow) #markings every 5 Volts self.voltsperdiv = [ '5V/div', '3V/div', '2V/div', '1V/div', '500mV/div', '400mV/div', '300mV/div', '100mV/div' ] self.trigger_channel = 0 self.trigger_level = 0 self.trigtext = pg.TextItem(html=self.trigger_text('CH1'), anchor=(1.2, 0.5), border='w', fill=(0, 0, 255, 100), angle=0) self.plot.addItem(self.trigtext) self.plot_area.addWidget(self.plot) self.CH1_REMAPS.addItems(self.I.allAnalogChannels) self.showgrid() self.trigtext.setParentItem(self.arrow) self.prescalerValue = 0 self.setGainCH1(0) self.setGainCH2(0) self.I.configure_trigger(self.trigger_channel, self.triggerChannelName, 0, prescaler=self.prescalerValue) self.autoRange() self.timer = self.newTimer() self.finished = False self.timer.singleShot(500, self.start_capture) self.enableShortcuts()
import threading import sys import time import datetime import json import numpy as np from PSL import analyticsClass analytics = analyticsClass.analyticsClass() class Oscilloscope: def __init__(self, I, file_write): self.file_write = file_write self.oscilloscope_voltage_read_thread = None self.oscilloscope_fft_read_thread = None self.oscilloscope_xy_plot_read_thread = None self.device = I self.is_reading_voltage = False self.is_reading_fft = False self.is_reading_xy_plot = False self.number_of_samples = 1000 self.time_base = 0.5 self.ch1 = True self.ch2 = False self.ch3 = False self.mic = False self.ch1_map = 'CH1' self.ch2_map = 'CH2'
def __init__(self, parent=None, **kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) self.I = kwargs.get('I', None) from PSL.analyticsClass import analyticsClass self.math = analyticsClass() self.setWindowTitle(self.I.H.version_string + ' : ' + params.get('name', '').replace('\n', ' ')) self.plot = self.add2DPlot(self.plot_area, enableMenu=False) for a in [self.C1_chan, self.edge1chan, self.edge2chan, self.C2_ID1, self.C2_ID2]: # ,self.C1_trig,self.C2_trig,self.C3_trig]: a.addItems(self.I.digital_channel_names) self.C2_ID2.setCurrentIndex(1) # cross hair self.vLine = pg.InfiniteLine(angle=90, movable=True) # self.vLine.setPen(color=(135,44,64,150), width=3) self.plot.addItem(self.vLine, ignoreBounds=False) self.proxy = pg.SignalProxy(self.vLine.scene().sigMouseMoved, rateLimit=60, slot=self.readCursor) self.fps = 0 self.active_dchannels = 1 self.channel_states = np.array([1, 0, 0, 0]) self.channels_in_buffer = 1 self.dtrig = 0 self.dchan_modes = [1, 1, 1, 1] self.dtime = 0.001 self.maxT = 0 self.max_samples_per_channel = [0, self.I.MAX_SAMPLES / 4, self.I.MAX_SAMPLES / 4, self.I.MAX_SAMPLES / 4, self.I.MAX_SAMPLES / 4] self.samples = self.I.MAX_SAMPLES / 4 # self.sample_slider.value() self.lastTime = time.time() self.trace_colors = [(0, 255, 20), (255, 255, 0), (255, 10, 100), (10, 255, 255)] self.plot.setLabel('bottom', 'Time -->>', units='S') self.LlabelStyle = {'color': 'rgb%s' % (str(self.trace_colors[0])), 'font-size': '11pt'} self.plot.setLabel('left', 'CH1', units='V', **self.LlabelStyle) # self.plot.addLegend(offset=(-10,30)) self.plot.getPlotItem().setMouseEnabled(True, False) self.plot.setLimits(yMax=10, yMin=0, xMin=0) ydict = {2: 'Chan 1', 4: 'Chan 2', 6: 'Chan 3', 8: 'Chan 4'} self.plot.getAxis('left').setTicks([ydict.items()]) self.curve1 = self.addCurve(self.plot, name='1'); # self.curve1.setPen(color=self.trace_colors[0], width=1) self.curve2 = self.addCurve(self.plot, name='2'); # self.curve2.setPen(color=self.trace_colors[1], width=1) self.curve3 = self.addCurve(self.plot, name='3'); # self.curve3.setPen(color=self.trace_colors[2], width=1) self.curve4 = self.addCurve(self.plot, name='4'); # self.curve4.setPen(color=self.trace_colors[3], width=1) # self.I.sqr4_continuous(1000,.5,0.1,.5,0.3,.3,0.5,.1) self.region = pg.LinearRegionItem([0, 0]) self.region.setZValue(10) self.plot.addItem(self.region) for x in range(4): item = QtGui.QTableWidgetItem(); self.timingResults.setItem(x, 0, item); item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) item = QtGui.QTableWidgetItem(); self.timingResults.setItem(x, 1, item); item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) self.showgrid() self.set_digital_scope_time(0) self.timer = self.newTimer() self.finished = False self.timer.timeout.connect(self.update) self.timer.start(100)
def __init__(self, parent=None,**kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) self.I=kwargs.get('I',None) from PSL.analyticsClass import analyticsClass self.math = analyticsClass() self.setWindowTitle(self.I.H.version_string+' : '+params.get('name','').replace('\n',' ') ) self.trace_colors=[(0,255,20),(255,0,0),(255,255,100),(10,255,255)] self.plot=self.add2DPlot(self.plot_area,enableMenu=False) labelStyle = {'color': 'rgb%s'%(str(self.trace_colors[1])), 'font-size': '13pt'} self.plot2 = self.addAxis(self.plot,label='CH2',**labelStyle) self.plot.getPlotItem().setMouseEnabled(True,False) self.plot2.setMouseEnabled(True,False) #self.plot.getViewBox().setMouseMode(pg.ViewBox.RectMode) self.plot.hideButtons() self.fps=0 self.MAX_SAMPLES=2000 self.max_samples_per_channel=[0,self.MAX_SAMPLES/4,self.MAX_SAMPLES/4,self.MAX_SAMPLES/4,self.MAX_SAMPLES/4] self.liss_win=None self.liss_ready=False self.liss_animate_arrow1=None self.liss_animate_arrow2=None self.liss_animate_arrow3=None self.liss_anim1=None self.liss_anim2=None self.liss_anim3=None self.samples=self.max_samples_per_channel[1] self.active_channels=1 self.channel_states=np.array([1,0,0,0]) self.channels_in_buffer=1 self.chan1remap='CH1' self.ch123sa = 0 g=1.75 self.timebase = g self.lastTime=time.time() self.highresMode = False self.plot.setLabel('bottom', 'Time', units='S') self.LlabelStyle = {'color': 'rgb%s'%(str(self.trace_colors[0])), 'font-size': '11pt'} self.plot.setLabel('left','CH1', units='V',**self.LlabelStyle) labelStyle = {'color': 'rgb%s'%(str(self.trace_colors[1])), 'font-size': '13pt'} self.plot.getAxis('right').setLabel('CH2', units='V', **labelStyle) self.plot2.setGeometry(self.plot.plotItem.vb.sceneBoundingRect()) self.plot2.linkedViewChanged(self.plot.plotItem.vb, self.plot2.XAxis) ## Handle view resizing self.plot.getViewBox().sigStateChanged.connect(self.updateViews) self.curve1 = self.addCurve(self.plot,name='CH1'); self.curve1.setPen(color=self.trace_colors[0], width=2) self.curve2 = self.addCurve(self.plot2,name='CH2');self.curve2.setPen(color=self.trace_colors[1], width=2) self.curve3 = self.addCurve(self.plot,name='CH3'); self.curve3.setPen(color=self.trace_colors[2], width=2) self.curve4 = self.addCurve(self.plot,name='CH4'); self.curve4.setPen(color=self.trace_colors[3], width=2) self.curve_lis = self.addCurve(self.plot,name='XY'); self.curve_lis.setPen(color=(255,255,255), width=2) self.legend = self.plot.addLegend(offset=(-10,30)) self.legend.addItem(self.curve1,'Chan 1');self.legend.addItem(self.curve2,'Chan 2');self.legend.addItem(self.curve3,'CH3');self.legend.addItem(self.curve4,'MIC') #cross hair self.vLine = pg.InfiniteLine(angle=90, movable=False,pen=[100,100,200,200]) self.plot.addItem(self.vLine, ignoreBounds=True) self.hLine = pg.InfiniteLine(angle=0, movable=False,pen=[100,100,200,200]) self.plot.addItem(self.hLine, ignoreBounds=True) self.vb = self.plot.getPlotItem().vb self.proxy = pg.SignalProxy(self.plot.scene().sigMouseClicked, rateLimit=60, slot=self.mouseClicked) self.mousePoint=None self.fourierMode = False self.plot.setTitle('') self.curveF=[] for a in range(2): self.curveF.append( self.addCurve(self.plot)); self.curveF[-1].setPen(color=(255,255,255), width=2) self.curveFR = self.addCurve(self.plot2)#pg.PlotDataItem() #self.plot2.addItem(self.curveFR) self.curveFR.setPen(color=(255,255,255), width=1) self.CH1_ENABLE.setStyleSheet('background-color:rgba'+str(self.trace_colors[0])[:-1]+',3);color:(0,0,0);') self.CH2_ENABLE.setStyleSheet('background-color:rgba'+str(self.trace_colors[1])[:-1]+',3);color:(0,0,0);') for a in range(4): self.trigger_select_box.setItemData(a, QtGui.QColor(*self.trace_colors[a]), QtCore.Qt.BackgroundRole); self.triggerChannelName='CH1' self.arrow = pg.ArrowItem(pos=(0, 0), angle=0) self.plot.addItem(self.arrow) #markings every 5 Volts self.voltsperdiv = ['5V/div','3V/div','2V/div','1V/div','500mV/div','400mV/div','300mV/div','100mV/div'] self.trigger_channel=0 self.trigger_level = 0 self.trigtext = pg.TextItem(html=self.trigger_text('CH1'), anchor=(1.2,0.5), border='w', fill=(0, 0, 255, 100),angle=0) self.plot.addItem(self.trigtext) self.plot_area.addWidget(self.plot) self.CH1_REMAPS.addItems(self.I.allAnalogChannels) self.showgrid() self.trigtext.setParentItem(self.arrow) self.prescalerValue=0 self.setGainCH1(0) self.setGainCH2(0) self.I.configure_trigger(self.trigger_channel,self.triggerChannelName,0,prescaler = self.prescalerValue) self.autoRange() self.timer = self.newTimer() self.finished=False self.timer.singleShot(500,self.start_capture) self.enableShortcuts()
def __init__(self, parent=None, **kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) from PSL.analyticsClass import analyticsClass self.math = analyticsClass() self.I = kwargs.get('I', None) self.I.set_pv3(2.0) self.setWindowTitle(params.get('name', '').replace('\n', ' ')) self.prescalerValue = 0 self.plot = self.add2DPlot(self.plot_area, enableMenu=False) self.enableCrossHairs(self.plot) labelStyle = {'color': 'rgb(255,255,255)', 'font-size': '11pt'} self.plot.setLabel('left', 'V (CH1)', units='V', **labelStyle) self.plot.setLabel('bottom', 'Time', units='S', **labelStyle) self.I.select_range('CH1', 4) self.I.select_range('CH2', 4) self.p2 = self.enableRightAxis(self.plot) self.plot.getAxis('right').setLabel('V (CH2)', units='V', color='#ff0000') self.I.configure_trigger(0, 'CH1', 0, prescaler=self.prescalerValue) self.tg = 5. self.max_samples = 2000 self.samples = self.max_samples self.plot.setLimits(yMax=4, yMin=-4, xMin=0, xMax=self.samples * self.tg * 1e-6) self.plot.setYRange(-4, 4) self.p2.setLimits(yMax=4, yMin=-4) self.p2.setYRange(-4, 4) self.timer = self.newTimer() self.sinewidget = self.addW1(self.I) self.WidgetLayout.addWidget(self.sinewidget) self.sinewidget.dial.setValue(500) self.legend = self.plot.addLegend(offset=(-10, -30)) self.curve1 = self.addCurve(self.plot, 'Voltage Drop across R(CH1)') self.curve2 = self.addCurve(self.p2, 'Original Voltage (CH2)', pen=(255, 0, 0)) self.legend.addItem(self.curve2, 'Original Voltage (CH2)') self.WidgetLayout.setAlignment(QtCore.Qt.AlignLeft) #Control widgets self.res = self.spinIcon( TITLE='Resistance(R)', MIN=100, MAX=20000, TOOLTIP= "Enter the value of the resistor you connected between CH1 and GND", FUNC=lambda x: x, UNITS=u"\u03A9") self.res.spinBox.setValue(10000) self.WidgetLayout.addWidget(self.res) self.meterCH1 = self.displayIcon( TITLE='Voltages', TOOLTIP="Displays RMS voltage of CH1 and CH2") self.WidgetLayout.addWidget(self.meterCH1) self.meterCH2 = self.displayIcon(TITLE='Current and resistance', TOOLTIP="Displays current flow") self.WidgetLayout.addWidget(self.meterCH2) self.addPauseButton(self.bottomLayout, self.pause) self.running = True self.paused = False self.timer.singleShot(100, self.run)
def __init__(self, parent=None, **kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) self.I = kwargs.get('I', None) self.setWindowTitle(self.I.H.version_string + ' : ' + params.get('name', '').replace('\n', ' ')) self.plot1 = self.add2DPlot(self.plot_area) labelStyle = {'color': 'rgb(255,255,255)', 'font-size': '11pt'} self.plot1.setLabel('bottom', 'Time -->', units='S', **labelStyle) self.p2 = self.enableRightAxis(self.plot1) self.plot1.getAxis('left').setLabel('Vc -->>', units='V', color='#ffffff') self.plot1.getAxis('right').setLabel('VR -->>', units='V', color='#00ffff') self.p1legend = self.plot1.addLegend(offset=(-1, 1)) self.I.set_gain('CH1', 1) self.I.set_gain('CH2', 1) self.plot1.setYRange(-8.5, 8.5) self.p2.setYRange(-8.5, 8.5) self.curveCH1 = self.addCurve(self.plot1, 'VC(CH1-CH2)') self.curveCH2 = self.addCurve(self.p2, 'VR(CH2)') self.p1legend.addItem(self.curveCH2, 'VR(CH2)') #setting up plot 2 self.plot2 = self.add2DPlot(self.plot_area) self.plot2.getAxis('left').setLabel('Vr -->>', units='V', color='#00ffff') self.plot2.getAxis('bottom').setLabel('Vc -->>', units='V', color='#ffffff') self.plot2.setYRange(-8.5, 8.5) self.plot2.setXRange(-8.5, 8.5) self.plot2.addLegend() self.curveXY = self.addCurve(self.plot2, 'Vc vs Vr') from PSL.analyticsClass import analyticsClass self.CC = analyticsClass() self.I.configure_trigger(0, 'CH1', 0) self.tg = 20 self.samples = 2000 self.max_samples = 2000 self.prescaler = 0 self.timer = QtCore.QTimer() self.WidgetLayout.setAlignment(QtCore.Qt.AlignLeft) self.fdial = self.addW1(self.I) self.WidgetLayout.addWidget(self.fdial) self.fdial.dial.setValue(100) self.WidgetLayout.addWidget(self.addTimebase(self.I, self.set_timebase)) self.timer.singleShot(100, self.run) self.resultsTable.setRowCount(50) self.resultsTable.setColumnCount(4) self.resultsTable.setHorizontalHeaderLabels( ['F', 'Vc', 'I(mA)', 'dP = P(Vc)-P(I)']) self.acquireParams = False self.currentRow = 0 self.running = True self.plotAButton.setText('F vs dP') self.plotBButton.setText('F vs Vc/I') self.splitter.setSizes([10, 1000])
def __init__(self, parent=None, **kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) self.I = kwargs.get('I', None) self.I.set_wave('W1', 1e3) # 1KHz test self.I.set_wave('W2', 1e3) # 1KHz test cap_and_pcs = self.I.read_bulk_flash(self.I.CAP_AND_PCS, 8 * 4 + 5) # READY+calibration_string if cap_and_pcs[:5] == 'READY': self.scalers = list(struct.unpack('8f', cap_and_pcs[5:])) else: self.displayDialog('Cap and PCS calibration invalid') self.scalers = [self.I.SOCKET_CAPACITANCE, 1, 0, 1, 1, 1, 1, 1] from PSL.analyticsClass import analyticsClass self.math = analyticsClass() self.hexid = hex(self.I.device_id()) self.setWindowTitle(self.I.generic_name + ' : ' + self.I.H.version_string.decode("utf-8") + ' : ' + self.hexid) for a in range(50): for b in range(3): item = QtGui.QTableWidgetItem(); self.tbl.setItem(a, b, item); item.setText('') self.tests = [ ['I2C scan', [96], self.I2CScan], ['SQR-ID', 1e6, self.SQRID], ['CAP_SOCK', 0, self.CAP_SOCK], ['PV1-CH1', 'graph', self.PV1CH1], ['PV2-CH2', 'graph', self.PV2CH2], ['PV3-CH3', 'graph', self.PV3CH3], # group 2 begins ['SEN', 1e3, self.SEN], ['CAP', 329.5e-12, self.CAP], ['W1-CH1', 1e3, self.W1CH1], ['W2-CH2', 1e3, self.W2CH2], ['PCS-CH3', 1e3, self.PCSCH3], ] self.group1size = 6 self.tbl.setVerticalHeaderLabels([row[0] for row in self.tests]) self.tbl.setHorizontalHeaderLabels(['Expected', 'read', '']) self.tbl.setColumnWidth(0, 80) self.tbl.setColumnWidth(1, 150) # Nominal values for calibration constants self.PCS_SLOPE = 1 self.PCS_OFFSET = 0 self.socket_cap = 0 self.RESISTANCE_SCALING = 1 self.CR0 = 1; self.CR1 = 1; self.CR2 = 1; self.CR3 = 1 self.G1Tests = {} self.G2Tests = {} for n in range(len(self.tests)): self.tbl.item(n, 0).setText(str(self.tests[n][1])) ################# make readback buttons ############## fn = functools.partial(self.tests[n][2], n) if n < self.group1size: self.G1Tests[self.tests[n][0]] = (fn) else: self.G2Tests[self.tests[n][0]] = (fn) item = QtGui.QPushButton(); item.setText('test'); item.clicked.connect(fn) self.tbl.setCellWidget(n, 2, item) self.DACPLOT = self.add2DPlot(self.plot_area) self.WPLOT = self.add2DPlot(self.plot_area) labelStyle = {'color': 'rgb(255,255,255)', 'font-size': '11pt'} self.DACPLOT.setLabel('left', 'Error -->', units='V', **labelStyle) self.DACPLOT.setLabel('bottom', 'Actual Voltage -->', units='V', **labelStyle) self.DACPLOT.setYRange(-.02, .02) self.WPLOT.setLabel('left', 'Voltage -->', units='V', **labelStyle) self.WPLOT.setLabel('bottom', 'time -->', units='V', **labelStyle) self.WPLOT.setYRange(-3.3, 3.3) self.DacCurves = {} self.rebuildLegend(self.DACPLOT) for a in self.I.DAC.CHANS: self.DacCurves[a] = self.addCurve(self.DACPLOT, a) self.WCurves = {} self.rebuildLegend(self.WPLOT) for a in ['W1', 'W2']: self.WCurves[a] = self.addCurve(self.WPLOT, a)
def __init__(self, parent=None, **kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) self.I = kwargs.get('I', None) self.setWindowTitle(self.I.H.version_string + ' : ' + params.get('name', '').replace('\n', ' ')) from PSL.analyticsClass import analyticsClass self.math = analyticsClass() self.prescalerValue = 0 self.plot = self.add2DPlot(self.plot_area, enableMenu=True) self.enableCrossHairs(self.plot, []) labelStyle = {'color': 'rgb(255,255,255)', 'font-size': '11pt'} self.plot.setLabel('left', 'V (CH1)', units='V', **labelStyle) self.plot.setLabel('bottom', 'Time', units='S', **labelStyle) self.hLine = pg.InfiniteLine(angle=0, movable=False, pen=[255, 10, 20, 255]) self.plot.addItem(self.hLine, ignoreBounds=True) self.hLine.setPos(3.3) self.sh = 2 self.icg = 2 self.samples = 3694 self.tweak = 1 self.chan = 'AN8' self.timer = self.newTimer() self.legend = self.plot.addLegend(offset=(-10, 30)) self.curveCH1 = self.addCurve(self.plot, 'INPUT(%s)' % self.chan) self.autoRange() self.WidgetLayout.setAlignment(QtCore.Qt.AlignLeft) self.ControlsLayout.setAlignment(QtCore.Qt.AlignRight) self.ControlsLayout.addWidget(self.setStateIcon(I=self.I)) #Utility widgets self.I.set_pv1(4) #Control widgets a1 = { 'TITLE': 'SH', 'MIN': 2, 'MAX': 10, 'FUNC': self.set_timebase, 'UNITS': 'S', 'TOOLTIP': 'Set SH pulse width, and timebase' } self.ControlsLayout.addWidget(self.dialIcon(**a1)) self.set_timebase(2) a1 = { 'TITLE': 'Average', 'MIN': 1, 'MAX': 5, 'FUNC': self.set_tweak, 'UNITS': ' times', 'TOOLTIP': 'Average samples before displaying' } T = self.dialIcon(**a1) T.dial.setPageStep(1) T.dial.setValue(1) self.ControlsLayout.addWidget(T) a1 = { 'TITLE': 'ICG', 'MIN': 1, 'MAX': 65000, 'FUNC': self.set_icg, 'UNITS': 'S', 'TOOLTIP': 'Set ICG' } self.WidgetLayout.addWidget(self.dialIcon(**a1)) self.I.set_sine2(1000) self.running = True self.fit = False self.timer.singleShot(100, self.run) self.Y = np.zeros(3648) self.num = 0
def __init__(self, parent=None,**kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) self.I=kwargs.get('I',None) self.setWindowTitle(self.I.H.version_string+' : '+params.get('name','').replace('\n',' ') ) self.plot1=self.add2DPlot(self.plot_area) labelStyle = {'color': 'rgb(255,255,255)', 'font-size': '11pt'} self.plot1.setLabel('bottom','Time', units='S',**labelStyle) self.p2=self.enableRightAxis(self.plot1) self.plot1.getAxis('left').setLabel('VL', units='V', color='#ffffff') self.plot1.getAxis('right').setLabel('VR', units='V', color='#00ffff') self.p1legend = self.plot1.addLegend(offset=(-1,1)) self.I.set_gain('CH1',3) self.I.set_gain('CH2',1) self.plot1.setYRange(-8.5,8.5) self.p2.setYRange(-8.5,8.5) self.curveCH1 = self.addCurve(self.plot1,'VC(CH1-CH2)') self.curveCH2 = self.addCurve(self.p2,'VR(CH2)',pen=(0,255,255)) self.p1legend.addItem(self.curveCH2,'VR(CH2)') #setting up plot 2 self.plot2=self.add2DPlot(self.plot_area) self.plot2.getAxis('left').setLabel('VR', units='V', color='#00ffff') self.plot2.getAxis('bottom').setLabel('VL', units='V', color='#ffffff') self.plot2.setYRange(-8.5,8.5) self.plot2.setXRange(-8.5,8.5) self.plot2.addLegend() self.curveXY = self.addCurve(self.plot2,'Vl vs Vr',pen=[0,255,255]) from PSL.analyticsClass import analyticsClass self.CC = analyticsClass() self.I.configure_trigger(0,'CH1',0) self.tg=2 self.samples = 2000 self.max_samples = 2000 self.prescaler = 0 self.timer = QtCore.QTimer() self.WidgetLayout.setAlignment(QtCore.Qt.AlignLeft) self.fdial = self.addW1(self.I); self.WidgetLayout.addWidget(self.fdial) self.fdial.dial.setValue(100) self.TB = self.addTimebase(self.I,self.set_timebase) self.WidgetLayout.addWidget(self.TB) self.timer.singleShot(100,self.run) self.resultsTable.setRowCount(50) self.resultsTable.setColumnCount(4) self.resultsTable.setHorizontalHeaderLabels(['F','Vl','Vr','dP = P(Vl)-P(Vr)']) self.acquireParams = False self.currentRow=0 self.running=True self.plotAButton.setText('F vs dP') self.plotBButton.setParent(None) self.splitter.setSizes([10,1000])
def __init__(self, parent=None, **kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) self.I = kwargs.get('I', None) self.setWindowTitle(self.I.H.version_string + ' : ' + params.get('name', '').replace('\n', ' ')) from PSL.analyticsClass import analyticsClass self.math = analyticsClass() self.prescalerValue = 0 self.plot = self.add2DPlot(self.plot_area, enableMenu=False) self.enableCrossHairs(self.plot, []) labelStyle = {'color': 'rgb(255,255,255)', 'font-size': '11pt'} self.plot.setLabel('left', 'V (CH1)', units='V', **labelStyle) self.plot.setLabel('bottom', 'Time', units='S', **labelStyle) self.plot.setYRange(-8.5, 8.5) self.p2 = self.enableRightAxis(self.plot) self.plot.getAxis('right').setLabel('V (CH2)', units='V', color='#ff0000') self.I.configure_trigger(0, 'CH1', 0, prescaler=self.prescalerValue) self.tg = 2 self.max_samples = 2000 self.samples = self.max_samples self.timer = self.newTimer() self.legend = self.plot.addLegend(offset=(-10, 30)) self.curveCH1 = self.addCurve(self.plot, 'INPUT(CH1)') self.curveCH2 = self.addCurve(self.plot, 'OUTPUT(CH2)') self.curveCH2 = self.addCurve(self.p2, 'OUTPUT(CH2)') self.curveCH2.setPen(color=(255, 0, 0)) self.autoRange() self.WidgetLayout.setAlignment(QtCore.Qt.AlignLeft) self.ControlsLayout.setAlignment(QtCore.Qt.AlignRight) #Utility widgets self.sinewidget = self.addW1(self.I) self.WidgetLayout.addWidget(self.sinewidget) self.sinewidget.dial.setValue(500) pv = self.addPV3(self.I) self.WidgetLayout.addWidget(pv) pv.dial.setValue(2048) #midpoint a1 = { 'TITLE': 'Measure Gain', 'FUNC': self.measureGain, 'TOOLTIP': 'Curve fit the traces and find the gain of the circuit' } self.ampGain = self.buttonIcon(**a1) self.WidgetLayout.addWidget(self.ampGain) #Control widgets a1 = { 'TITLE': 'TIMEBASE', 'MIN': 0, 'MAX': 9, 'FUNC': self.set_timebase, 'UNITS': 'S', 'TOOLTIP': 'Set Timebase of the oscilloscope' } self.ControlsLayout.addWidget(self.dialIcon(**a1)) G = self.gainIcon(FUNC=self.I.set_gain, LINK=self.gainChanged) self.ControlsLayout.addWidget(G) G.g1.setCurrentIndex(7) G.g2.setCurrentIndex(1) self.running = True self.fit = False self.timer.singleShot(100, self.run)
def __init__(self, parent=None, **kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) self.I = kwargs.get('I', None) from PSL.analyticsClass import analyticsClass self.math = analyticsClass() self.setWindowTitle(self.I.H.version_string + ' : ' + params.get('name', '').replace('\n', ' ')) self.plot = self.add2DPlot(self.plot_area, enableMenu=False) self.plot.setDownsampling(mode='peak') self.plot.setClipToView(True) self.trace_colors = [(0, 255, 20), (255, 0, 0), (255, 255, 100)] labelStyle = { 'color': 'rgb%s' % (str(self.trace_colors[1])), 'font-size': '13pt' } self.plot2 = self.addAxis(self.plot, label='CH2', **labelStyle) labelStyle = { 'color': 'rgb%s' % (str(self.trace_colors[2])), 'font-size': '13pt' } self.plotF = self.add2DPlot(self.plot_area, enableMenu=False) self.plotF.setLabel('bottom', 'Frequency', units='Hz') self.FT = 50 xlen = 1.e6 / self.FT / 2 self.plotF.autoRange() self.plotF.setXRange(0, min(10e3, xlen)) self.plotF.setLimits(xMin=0, xMax=min(10e3, xlen)) self.plot2.setMouseEnabled(True, True) self.ftzoomout = self.rightClickToZoomOut(self.plotF) self.plot.getPlotItem().setMouseEnabled(True, False) #self.plot.getViewBox().setMouseMode(pg.ViewBox.RectMode) self.plot.hideButtons() #self.plotF.hideButtons() self.fps = 0 self.MAX_SAMPLES = 5000 self.max_samples_per_channel = [ 0, self.MAX_SAMPLES, self.MAX_SAMPLES / 2 ] self.samples = self.max_samples_per_channel[1] self.active_channels = 1 self.channel_states = np.array([1, 0]) self.channels_in_buffer = 1 g = 1.75 self.timebase = g self.lastTime = time.time() self.highresMode = False self.plot.setLabel('bottom', 'Time', units='S') self.LlabelStyle = { 'color': 'rgb%s' % (str(self.trace_colors[0])), 'font-size': '11pt' } self.plot.setLabel('left', 'CH1', units='V', **self.LlabelStyle) self.plot2.setGeometry(self.plot.plotItem.vb.sceneBoundingRect()) #self.plot2.linkedViewChanged(self.plot.plotItem.vb, self.plot2.XAxis) ## Handle view resizing self.plot.getViewBox().sigStateChanged.connect(self.updateViews) self.curve1 = self.addCurve(self.plot, name='CH1') self.curve1.setPen(color=self.trace_colors[0], width=1) self.curve2 = self.addCurve(self.plot2, name='CH2(Carrier/Mod)') self.curve2.setPen(color=self.trace_colors[1], width=1) self.legend = self.plot.addLegend(offset=(-10, 30)) self.legend.addItem(self.curve1, 'CH1') self.legend.addItem(self.curve2, 'CH2') #self.I.load_equation('W2','sine',amp=0.7) self.WidgetLayout.setAlignment(QtCore.Qt.AlignLeft) a1 = { 'TITLE': 'W2(Carrier)', 'MIN': 10, 'MAX': 5000, 'FUNC': self.I.set_w2, 'TYPE': 'dial', 'UNITS': 'Hz', 'TOOLTIP': 'Frequency of waveform generator #2.\nUsed as the Carrier Wave' } self.w1 = self.dialAndDoubleSpinIcon(**a1) self.WidgetLayout.addWidget(self.w1) self.w1.dial.setValue(5000) a1 = { 'TITLE': 'W1(Mod)', 'MIN': 10, 'MAX': 500, 'FUNC': self.I.set_w1, 'TYPE': 'dial', 'UNITS': 'Hz', 'TOOLTIP': 'Frequency of waveform generator #1.\nUsed as the Modulation input' } self.w2 = self.dialAndDoubleSpinIcon(**a1) self.WidgetLayout.addWidget(self.w2) self.w2.dial.setValue(400) #cross hair self.vLine = pg.InfiniteLine(angle=90, movable=False, pen=[100, 100, 200, 200]) self.plot.addItem(self.vLine, ignoreBounds=True) self.hLine = pg.InfiniteLine(angle=0, movable=False, pen=[100, 100, 200, 200]) self.plot.addItem(self.hLine, ignoreBounds=True) self.vb = self.plot.getPlotItem().vb self.proxy = pg.SignalProxy(self.plot.scene().sigMouseClicked, rateLimit=60, slot=self.mouseClicked) self.mousePoint = None #add FFT curve self.curveFft = self.addCurve(self.plotF, name='CH1 FFT') self.curveFft.setPen(color=self.trace_colors[0], width=1) #Add fit overlay curves self.curveFL = self.addCurve(self.plot) self.curveFL.setPen(color=(255, 255, 255, 100), width=3) self.curveFR = self.addCurve(self.plot2) #pg.PlotDataItem() self.curveFR.setPen(color=(255, 255, 255, 100), width=3) self.CH1_ENABLE.setStyleSheet('background-color:rgba' + str(self.trace_colors[0])[:-1] + ',3);color:(0,0,0);') self.CH2_ENABLE.setStyleSheet('background-color:rgba' + str(self.trace_colors[1])[:-1] + ',3);color:(0,0,0);') for a in range(2): self.trigger_select_box.setItemData( a, QtGui.QColor(*self.trace_colors[a]), QtCore.Qt.BackgroundRole) self.triggerChannelName = 'CH1' self.arrow = pg.ArrowItem(pos=(0, 0), angle=0) self.plot.addItem(self.arrow) #markings every 5 Volts self.voltsperdiv = [ '5V/div', '3V/div', '2V/div', '1V/div', '500mV/div', '400mV/div', '300mV/div', '100mV/div' ] self.trigger_channel = 0 self.trigger_level = 0 self.trigtext = pg.TextItem(html=self.trigger_text('CH1'), anchor=(1.2, 0.5), border='w', fill=(0, 0, 255, 100), angle=0) self.plot.addItem(self.trigtext) #self.plot_area.addWidget(self.plot) #self.plot_area.addWidget(self.plot) self.showgrid() self.trigtext.setParentItem(self.arrow) self.prescalerValue = 0 self.I.configure_trigger(self.trigger_channel, self.triggerChannelName, 0, prescaler=self.prescalerValue) self.autoRange() self.timer = self.newTimer() self.finished = False self.timer.singleShot(500, self.start_captureNORMAL) self.enableShortcuts()
def __init__(self, parent=None,**kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) self.I=kwargs.get('I',None) from PSL.analyticsClass import analyticsClass self.math = analyticsClass() self.setWindowTitle(self.I.H.version_string+' : '+params.get('name','').replace('\n',' ') ) self.plot=self.add2DPlot(self.plot_area,enableMenu=False) self.plot.setDownsampling(mode='peak') self.plot.setClipToView(True) self.trace_colors=[(0,255,20),(255,0,0),(255,255,100)] labelStyle = {'color': 'rgb%s'%(str(self.trace_colors[1])), 'font-size': '13pt'} self.plot2 = self.addAxis(self.plot,label='CH2',**labelStyle) labelStyle = {'color': 'rgb%s'%(str(self.trace_colors[2])), 'font-size': '13pt'} self.plotF=self.add2DPlot(self.plot_area,enableMenu=False) self.plotF.setLabel('bottom', 'Frequency', units='Hz') self.FT=50 xlen = 1.e6/self.FT/2 self.plotF.autoRange();self.plotF.setXRange(0,min(10e3,xlen)) self.plotF.setLimits(xMin=0,xMax=min(10e3,xlen)) self.plot2.setMouseEnabled(True,True) self.ftzoomout = self.rightClickToZoomOut(self.plotF) self.plot.getPlotItem().setMouseEnabled(True,False) #self.plot.getViewBox().setMouseMode(pg.ViewBox.RectMode) self.plot.hideButtons();#self.plotF.hideButtons() self.fps=0 self.MAX_SAMPLES=5000 self.max_samples_per_channel=[0,self.MAX_SAMPLES,self.MAX_SAMPLES/2] self.samples=self.max_samples_per_channel[1] self.active_channels=1 self.channel_states=np.array([1,0]) self.channels_in_buffer=1 g=1.75 self.timebase = g self.lastTime=time.time() self.highresMode = False self.plot.setLabel('bottom', 'Time', units='S') self.LlabelStyle = {'color': 'rgb%s'%(str(self.trace_colors[0])), 'font-size': '11pt'} self.plot.setLabel('left','CH1', units='V',**self.LlabelStyle) self.plot2.setGeometry(self.plot.plotItem.vb.sceneBoundingRect()) #self.plot2.linkedViewChanged(self.plot.plotItem.vb, self.plot2.XAxis) ## Handle view resizing self.plot.getViewBox().sigStateChanged.connect(self.updateViews) self.curve1 = self.addCurve(self.plot,name='CH1'); self.curve1.setPen(color=self.trace_colors[0], width=1) self.curve2 = self.addCurve(self.plot2,name='CH2(Carrier/Mod)');self.curve2.setPen(color=self.trace_colors[1], width=1) self.legend = self.plot.addLegend(offset=(-10,30)) self.legend.addItem(self.curve1,'CH1');self.legend.addItem(self.curve2,'CH2'); #self.I.load_equation('W2','sine',amp=0.7) self.WidgetLayout.setAlignment(QtCore.Qt.AlignLeft) a1={'TITLE':'W2(Carrier)','MIN':10,'MAX':5000,'FUNC':self.I.set_w2,'TYPE':'dial','UNITS':'Hz','TOOLTIP':'Frequency of waveform generator #2.\nUsed as the Carrier Wave'} self.w1 = self.dialAndDoubleSpinIcon(**a1);self.WidgetLayout.addWidget(self.w1);self.w1.dial.setValue(5000) a1={'TITLE':'W1(Mod)','MIN':10,'MAX':500,'FUNC':self.I.set_w1,'TYPE':'dial','UNITS':'Hz','TOOLTIP':'Frequency of waveform generator #1.\nUsed as the Modulation input'} self.w2 = self.dialAndDoubleSpinIcon(**a1);self.WidgetLayout.addWidget(self.w2);self.w2.dial.setValue(400) #cross hair self.vLine = pg.InfiniteLine(angle=90, movable=False,pen=[100,100,200,200]) self.plot.addItem(self.vLine, ignoreBounds=True) self.hLine = pg.InfiniteLine(angle=0, movable=False,pen=[100,100,200,200]) self.plot.addItem(self.hLine, ignoreBounds=True) self.vb = self.plot.getPlotItem().vb self.proxy = pg.SignalProxy(self.plot.scene().sigMouseClicked, rateLimit=60, slot=self.mouseClicked) self.mousePoint=None #add FFT curve self.curveFft= self.addCurve(self.plotF,name='CH1 FFT') self.curveFft.setPen(color=self.trace_colors[0], width=1) #Add fit overlay curves self.curveFL= self.addCurve(self.plot) self.curveFL.setPen(color=(255,255,255,100), width=3) self.curveFR = self.addCurve(self.plot2)#pg.PlotDataItem() self.curveFR.setPen(color=(255,255,255,100), width=3) self.CH1_ENABLE.setStyleSheet('background-color:rgba'+str(self.trace_colors[0])[:-1]+',3);color:(0,0,0);') self.CH2_ENABLE.setStyleSheet('background-color:rgba'+str(self.trace_colors[1])[:-1]+',3);color:(0,0,0);') for a in range(2): self.trigger_select_box.setItemData(a, QtGui.QColor(*self.trace_colors[a]), QtCore.Qt.BackgroundRole); self.triggerChannelName='CH1' self.arrow = pg.ArrowItem(pos=(0, 0), angle=0) self.plot.addItem(self.arrow) #markings every 5 Volts self.voltsperdiv = ['5V/div','3V/div','2V/div','1V/div','500mV/div','400mV/div','300mV/div','100mV/div'] self.trigger_channel=0 self.trigger_level = 0 self.trigtext = pg.TextItem(html=self.trigger_text('CH1'), anchor=(1.2,0.5), border='w', fill=(0, 0, 255, 100),angle=0) self.plot.addItem(self.trigtext) #self.plot_area.addWidget(self.plot) #self.plot_area.addWidget(self.plot) self.showgrid() self.trigtext.setParentItem(self.arrow) self.prescalerValue=0 self.I.configure_trigger(self.trigger_channel,self.triggerChannelName,0,prescaler = self.prescalerValue) self.autoRange() self.timer = self.newTimer() self.finished=False self.timer.singleShot(500,self.start_captureNORMAL) self.enableShortcuts()
def __init__(self, parent=None,**kwargs): super(AppWindow, self).__init__(parent) self.setupUi(self) self.I=kwargs.get('I',None) self.setWindowTitle(self.I.H.version_string+' : '+params.get('name','').replace('\n',' ') ) from PSL.analyticsClass import analyticsClass self.math = analyticsClass() self.prescalerValue=0 self.plot=self.add2DPlot(self.plot_area,enableMenu=False) self.enableCrossHairs(self.plot,[]) labelStyle = {'color': 'rgb(255,255,255)', 'font-size': '11pt'} self.plot.setLabel('left','V (CH1)', units='V',**labelStyle) self.plot.setLabel('bottom','Time', units='S',**labelStyle) self.plot.setYRange(-8.5,8.5) self.p2=self.enableRightAxis(self.plot) self.plot.getAxis('right').setLabel('V (CH2)', units='V', color='#ff0000') self.I.configure_trigger(0,'CH1',0,prescaler = self.prescalerValue) self.tg=2 self.max_samples=2000 self.samples = self.max_samples self.timer = self.newTimer() self.legend = self.plot.addLegend(offset=(-10,30)) self.curveCH1 = self.addCurve(self.plot,'INPUT(CH1)') self.curveCH2 = self.addCurve(self.plot,'OUTPUT(CH2)') self.curveCH2=self.addCurve(self.p2,'OUTPUT(CH2)') self.curveCH2.setPen(color=(255,0,0)) self.autoRange() self.WidgetLayout.setAlignment(QtCore.Qt.AlignLeft) self.ControlsLayout.setAlignment(QtCore.Qt.AlignRight) #Utility widgets self.sinewidget = self.addW1(self.I) self.WidgetLayout.addWidget(self.sinewidget) self.sinewidget.dial.setValue(500) pv = self.addPV3(self.I) self.WidgetLayout.addWidget(pv) pv.dial.setValue(2048) #midpoint a1={'TITLE':'Measure Gain','FUNC':self.measureGain,'TOOLTIP':'Curve fit the traces and find the gain of the circuit'} self.ampGain = self.buttonIcon(**a1) self.WidgetLayout.addWidget(self.ampGain) #Control widgets a1={'TITLE':'TIMEBASE','MIN':0,'MAX':9,'FUNC':self.set_timebase,'UNITS':'S','TOOLTIP':'Set Timebase of the oscilloscope'} self.ControlsLayout.addWidget(self.dialIcon(**a1)) G = self.gainIcon(FUNC=self.I.set_gain,LINK=self.gainChanged) self.ControlsLayout.addWidget(G) G.g1.setCurrentIndex(7) G.g2.setCurrentIndex(1) self.running=True self.fit = False self.timer.singleShot(100,self.run)