示例#1
0
	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)
示例#2
0
	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
示例#9
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.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)
示例#11
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 -->>', 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
示例#13
0
    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
示例#14
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',' ') )

		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
示例#15
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)
示例#16
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.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)
示例#17
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.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)
示例#18
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('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])
示例#19
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',' ') )

		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)
示例#20
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',' ') )

		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)
示例#21
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', ' '))
        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)
示例#22
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',' ') )

		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)
示例#23
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.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)
示例#24
0
    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)
示例#25
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.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)
示例#26
0
    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
示例#29
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)
示例#30
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',' ') )

		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)
示例#31
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', ' '))
        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)
示例#32
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',' ') )
		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)
示例#33
0
	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=[]
示例#34
0
    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)
示例#35
0
	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)
示例#36
0
	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)
示例#37
0
	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)
示例#39
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.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)
示例#41
0
    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)
示例#44
0
	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()
示例#45
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.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])
示例#47
0
    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)
示例#48
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', ' '))

        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])
示例#50
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', ' '))

        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)
示例#51
0
    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()
示例#52
0
	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)