Пример #1
0
 def _lowLevelSetChannel(self, chNum, enabled, coupling, VRange, VOffset,
                         BWLimited):
     m = self.lib.ps6000SetChannel(c_int16(self.handle), c_enum(chNum),
                                   c_int16(enabled), c_enum(coupling),
                                   c_enum(VRange), c_float(VOffset),
                                   c_enum(BWLimited))
     self.checkResult(m)
Пример #2
0
 def _lowLevelSetChannel(self, chNum, enabled, coupling, VRange, VOffset,
                         BWLimited):
     m = self.lib.ps3000_set_channel(c_int16(self.handle), c_enum(chNum),
                                     c_int16(enabled), c_enum(coupling),
                                     c_enum(VRange))
     if m == 0:
         raise IOError('Error calling %s: parameter out of range' % (inspect.stack()[1][3]))
Пример #3
0
    def _lowLevelSetAWGSimpleDeltaPhase(self, waveform, deltaPhase,
                                        offsetVoltage, pkToPk, indexMode,
                                        shots, triggerType, triggerSource):
        """ waveform should be an array of shorts. """

        waveformPtr = waveform.ctypes.data_as(POINTER(c_int16))

        m = self.lib.ps6000SetSigGenArbitrary(
            c_int16(self.handle),
            c_uint32(int(offsetVoltage * 1E6)),  # offset voltage in microvolts
            c_uint32(int(pkToPk * 1E6)),         # pkToPk in microvolts
            c_uint32(int(deltaPhase)),           # startDeltaPhase
            c_uint32(int(deltaPhase)),           # stopDeltaPhase
            c_uint32(0),                         # deltaPhaseIncrement
            c_uint32(0),                         # dwellCount
            waveformPtr,                         # arbitraryWaveform
            c_int32(len(waveform)),              # arbitraryWaveformSize
            c_enum(0),                           # sweepType for deltaPhase
            c_enum(0),            # operation (adding random noise and whatnot)
            c_enum(indexMode),                   # single, dual, quad
            c_uint32(shots),
            c_uint32(0),                         # sweeps
            c_uint32(triggerType),
            c_uint32(triggerSource),
            c_int16(0))                          # extInThreshold
        self.checkResult(m)
Пример #4
0
 def _lowLevelSetSimpleTrigger(self, enabled, trigsrc, threshold_adc,
                               direction, delay, timeout_ms):
     m = self.lib.ps4000aSetSimpleTrigger(
         c_int16(self.handle), c_int16(enabled),
         c_enum(trigsrc), c_int16(threshold_adc),
         c_enum(direction), c_uint32(delay), c_int16(timeout_ms))
     self.checkResult(m)
Пример #5
0
 def _lowLevelClearDataBuffer(self, channel, segmentIndex):
     m = self.lib.ps3000aSetDataBuffer(c_int16(self.handle),
                                       c_enum(channel),
                                       c_void_p(), c_uint32(0),
                                       c_uint32(segmentIndex),
                                       c_enum(0))
     self.checkResult(m)
Пример #6
0
    def _lowLevelSetDataBuffers(self, channel, bufferMax, bufferMin, downSampleRatioMode):
        bufferMaxPtr = bufferMax.ctypes.data_as(POINTER(c_int16))
        bufferMinPtr = bufferMin.ctypes.data_as(POINTER(c_int16))
        bufferLth = len(bufferMax)

        m = self.lib.ps6000SetDataBuffers(c_int16(self.handle), c_enum(channel),
                                          bufferMaxPtr, bufferMinPtr, c_uint32(bufferLth),
                                          c_enum(downSampleRatioMode))
        self.checkResult(m)
Пример #7
0
    def _lowLevelSetDataBufferBulk(self, channel, buffer, waveform, downSampleRatioMode):
        bufferPtr = buffer.ctypes.data_as(POINTER(c_int16))
        bufferLth = len(buffer)

        m = self.lib.ps6000SetDataBufferBulk(
            c_int16(self.handle),
            c_enum(channel), bufferPtr, c_uint32(bufferLth),
            c_uint32(waveform), c_enum(downSampleRatioMode))
        self.checkResult(m)
Пример #8
0
    def _lowLevelSetSimpleTrigger(self, enabled, trigsrc, threshold_adc,
                                  direction, delay, timeout_ms):
        # TODO: Fix 'auto' which is where trigger occurs in block.
        # Delay is not used

        m = self.lib.ps3000_set_trigger(
            c_int16(self.handle), c_enum(trigsrc), c_int16(threshold_adc),
            c_enum(direction), c_int16(delay), c_int16(timeout_ms))
        self.checkResult(m)
Пример #9
0
 def _lowLevelSetChannel(self, chNum, enabled, coupling, VRange, VOffset,
                         BWLimited):
     m = self.lib.ps5000aSetChannel(c_int16(self.handle), c_enum(chNum),
                                   c_int16(enabled), c_enum(coupling),
                                   c_enum(VRange), c_float(VOffset))
     self.checkResult(m)
     if BWLimited:
         m = self.lib.ps5000aSetBandwidthFilter(c_int16(self.handle), c_enum(chNum), c_enum(1))
     else:
         m = self.lib.ps5000aSetBandwidthFilter(c_int16(self.handle), c_enum(chNum), c_enum(0))
     self.checkResult(m)
Пример #10
0
    def _lowLevelGetAnalogueOffset(self, range, coupling):
        # TODO, populate properties with this function
        maximumVoltage = c_float()
        minimumVoltage = c_float()

        m = self.lib.ps6000GetAnalogueOffset(
            c_int16(self.handle), c_enum(range), c_enum(coupling),
            byref(maximumVoltage), byref(minimumVoltage))
        self.checkResult(m)

        return (maximumVoltage.value, minimumVoltage.value)
Пример #11
0
    def _lowLevelRunStreaming(self, sampleInterval, sampleIntervalTimeUnits, maxPreTriggerSamples,
                              maxPostTriggerSamples, autoStop, downSampleRatio, downSampleRatioMode,
                              overviewBufferSize):
        m = self.lib.ps4000aRunStreaming(
            c_int16(self.handle),
            byref(c_uint32(sampleInterval)),
            c_enum(sampleIntervalTimeUnits),
            c_uint32(maxPreTriggerSamples),
            c_uint32(maxPostTriggerSamples),
            c_int16(autoStop),
            c_uint32(downSampleRatio),
            c_enum(downSampleRatioMode),
            c_uint32(overviewBufferSize))

        self.checkResult(m)
Пример #12
0
    def _lowLevelGetTriggerTimeOffset(self, segmentIndex):
        time = c_uint64()
        timeUnits = c_enum()

        m = self.lib.ps4000aGetTriggerTimeOffset64(
            c_int16(self.handle),
            byref(time),
            byref(timeUnits),
            c_uint16(segmentIndex))

        self.checkResult(m)

        if timeUnits.value == 0:  # PS4000a_FS
            return time.value * 1E-15
        elif timeUnits.value == 1:  # PS4000a_PS
            return time.value * 1E-12
        elif timeUnits.value == 2:  # PS4000a_NS
            return time.value * 1E-9
        elif timeUnits.value == 3:  # PS4000a_US
            return time.value * 1E-6
        elif timeUnits.value == 4:  # PS4000a_MS
            return time.value * 1E-3
        elif timeUnits.value == 5:  # PS4000a_S
            return time.value * 1E0
        else:
            raise TypeError("Unknown timeUnits %d" % timeUnits.value)
Пример #13
0
 def _lowLevelSetSigGenBuiltInSimple(self, offsetVoltage, pkToPk, waveType,
                                     frequency, shots, triggerType,
                                     triggerSource):
     # TODO, I just noticed that V2 exists
     # Maybe change to V2 in the future
     m = self.lib.ps6000SetSigGenBuiltIn(
         c_int16(self.handle),
         c_int32(int(offsetVoltage * 1000000)),
         c_int32(int(pkToPk        * 1000000)),
         c_int16(waveType),
         c_float(frequency), c_float(frequency),
         c_float(0), c_float(0), c_enum(0), c_enum(0),
         c_uint32(shots), c_uint32(0),
         c_enum(triggerType), c_enum(triggerSource),
         c_int16(0))
     self.checkResult(m)
Пример #14
0
    def _lowLevelGetUnitInfo(self, info):
        s = create_string_buffer(256)
        requiredSize = c_int16(0)

        m = self.lib.ps4000GetUnitInfo(c_int16(self.handle), byref(s),
                                       c_int16(len(s)), byref(requiredSize),
                                       c_enum(info))
        self.checkResult(m)
        if requiredSize.value > len(s):
            s = create_string_buffer(requiredSize.value + 1)
            m = self.lib.ps4000GetUnitInfo(c_int16(self.handle), byref(s),
                                           c_int16(len(s)),
                                           byref(requiredSize), c_enum(info))
            self.checkResult(m)

        return s.value
Пример #15
0
    def _lowLevelSetDataBuffer(self, channel, data, downSampleMode, segmentIndex):
        """
        data should be a numpy array

        Be sure to call _lowLevelClearDataBuffer
        when you are done with the data array
        or else subsequent calls to GetValue will still use the same array.
        """
        dataPtr = data.ctypes.data_as(POINTER(c_int16))
        numSamples = len(data)

        m = self.lib.ps5000aSetDataBuffer(c_int16(self.handle), c_enum(channel),
                                         dataPtr, c_int32(numSamples),
                                         c_uint32(segmentIndex),
                                         c_enum(downSampleMode))
        self.checkResult(m)
Пример #16
0
 def _lowLevelClearDataBuffers(self, channel):
     m = self.lib.ps4000aSetDataBuffers(
         c_int16(self.handle),
         c_enum(channel),
         c_void_p(),
         c_void_p(),
         c_uint32(0))
     self.checkResult(m)
Пример #17
0
    def _lowLevelSetChannel(self, chNum, enabled, coupling, VRange, VOffset,
                            bandwidth):
        m = self.lib.ps5000aSetChannel(c_int16(self.handle), c_enum(chNum),
                                       c_int16(enabled), c_enum(coupling),
                                       c_enum(VRange), c_float(VOffset))
        self.checkResult(m)

        # The error this might through are
        #    INVALID_HANDLE
        #    INVALID_CHANNEL
        #    INVALID_BANDWIDTH
        # Invalid bandwidth is the only case that could go wrong.
        # The others would be thrown above (assuming no race condition:
        # i.e. unplugging the scope in between this call.
        # I decided to keep the logic below to avoid a possible error
        # picobase/SetChannel should be changed to the following
        # Set the channel
        # save the new channel settings
        # check if ps5000a
        # change the bandwidth separately
        # changing the bandwidth would be it's own function (implemented below)
        if bandwidth:
            m = self.lib.ps5000aSetBandwidthFilter(c_int16(self.handle),
                                                   c_enum(chNum), c_enum(1))
        else:
            m = self.lib.ps5000aSetBandwidthFilter(c_int16(self.handle),
                                                   c_enum(chNum), c_enum(0))
        self.checkResult(m)
Пример #18
0
    def _lowLevelSetDataBuffer(self, channel, data, downSampleMode,
                               segmentIndex):
        """Set the data buffer.

        Be sure to call _lowLevelClearDataBuffer
        when you are done with the data array
        or else subsequent calls to GetValue will still use the same array.

        segmentIndex is unused, but required by other versions of the API
        (eg PS5000a)
        """
        dataPtr = data.ctypes.data_as(POINTER(c_int16))
        numSamples = len(data)

        m = self.lib.ps6000SetDataBuffer(c_int16(self.handle), c_enum(channel),
                                         dataPtr, c_uint32(numSamples),
                                         c_enum(downSampleMode))
        self.checkResult(m)
Пример #19
0
    def _lowLevelGetUnitInfo(self, info):
        s = create_string_buffer(256)
        requiredSize = c_int16(0)

        m = self.lib.ps4000aGetUnitInfo(c_int16(self.handle), byref(s),
                                        c_int16(len(s)), byref(requiredSize),
                                        c_enum(info))
        self.checkResult(m)
        if requiredSize.value > len(s):
            s = create_string_buffer(requiredSize.value + 1)
            m = self.lib.ps4000aGetUnitInfo(c_int16(self.handle), byref(s),
                                            c_int16(len(s)),
                                            byref(requiredSize), c_enum(info))
            self.checkResult(m)

        # should this bee ascii instead?
        # I think they are equivalent...
        return s.value.decode('utf-8')
Пример #20
0
    def _lowLevelSetSigGenBuiltInSimple(self, offsetVoltage, pkToPk, waveType,
                                        frequency, shots, triggerType, 
                                        triggerSource, stopFreq, increment, 
                                        dwellTime, sweepType, numSweeps):
        if stopFreq is None:
            stopFreq = frequency

        m = self.lib.ps4000SetSigGenBuiltIn(
            c_int16(self.handle),
            c_int32(int(offsetVoltage * 1000000)),
            c_int32(int(pkToPk        * 1000000)),
            c_int16(waveType),
            c_float(frequency), c_float(stopFreq),
            c_float(increment), c_float(dwellTime), c_enum(sweepType), c_enum(0),
            c_uint32(shots), c_uint32(numSweeps),
            c_enum(triggerType), c_enum(triggerSource),
            c_int16(0))
        self.checkResult(m)
Пример #21
0
    def _lowLevelGetUnitInfo(self, info):
        s = create_string_buffer(256)

        m = self.lib.ps3000_get_unit_info(
            c_int16(self.handle), byref(s), c_int16(len(s)), c_enum(info))
        self.checkResult(m)

        # should this bee ascii instead?
        # I think they are equivalent...
        return s.value.decode('utf-8')
Пример #22
0
    def _lowLevelGetMaxDownSampleRatio(self, noOfUnaggregatedSamples,
                                       downSampleRatioMode, segmentIndex):
        maxDownSampleRatio = c_uint32()

        m = self.lib.ps6000GetMaxDownSampleRatio(
            c_int16(self.handle), c_uint32(noOfUnaggregatedSamples), byref(maxDownSampleRatio),
            c_enum(downSampleRatioMode), c_uint32(segmentIndex))
        self.checkResult(m)

        return maxDownSampleRatio.value
Пример #23
0
 def _lowLevelGetUnitInfo(self, info):
     s = create_string_buffer(256)
     m = self.lib.ps3000_get_unit_info(c_int16(self.handle), byref(s),
                                       c_int16(len(s)), c_enum(info))
     if m == 0:
         raise IOError('Error calling %s: parameter out of range' % (inspect.stack()[1][3]))
     else:
         print('%d bytes returned' % (m))
     # should this be ascii instead?
     # I think they are equivalent...
     return s.value.decode('utf-8')
Пример #24
0
 def _lowLevelSetSigGenBuiltInSimple(self, offsetVoltage, pkToPk, waveType,
                                     frequency, shots, triggerType,
                                     triggerSource):
     m = self.lib.ps2000_set_sig_gen_built_in(
         c_int16(self.handle),
         c_int32(int(offsetVoltage * 1000000)),
         c_int32(int(pkToPk        * 1000000)),
         c_int16(waveType),
         c_float(frequency), c_float(frequency),
         c_float(0), c_float(0), c_enum(0), c_uint32(0))
     self.checkResult(m)
Пример #25
0
    def _lowLevelGetValuesBulk(self, numSamples, fromSegmentIndex, toSegmentIndex,
                               downSampleRatio, downSampleRatioMode):
        noOfSamples = c_uint32(numSamples)
        overflow = c_int16()

        m = self.lib.ps6000GetvaluesBulk(
            c_int16(self.handle),
            c_uint32(fromSegmentIndex), c_uint32(toSegmentIndex),
            c_uint32(downSampleRatio), c_enum(downSampleRatioMode),
            byref(overflow))
        self.checkResult(m)
        return (noOfSamples.value, overflow.value)
Пример #26
0
 def _lowLevelGetValues(self, numSamples, startIndex, downSampleRatio,
                        downSampleMode, segmentIndex):
     numSamplesReturned = c_uint32()
     numSamplesReturned.value = numSamples
     overflow = c_int16()
     m = self.lib.ps4000aGetValues(
         c_int16(self.handle), c_uint32(startIndex),
         byref(numSamplesReturned), c_uint32(downSampleRatio),
         c_enum(downSampleMode), c_uint16(segmentIndex),
         byref(overflow))
     self.checkResult(m)
     return (numSamplesReturned.value, overflow.value)
Пример #27
0
    def _lowLevelSetSigGenBuiltInSimple(self, offsetVoltage, pkToPk, waveType,
                                        frequency, shots, triggerType,
                                        triggerSource, stopFreq, increment,
                                        dwellTime, sweepType, numSweeps):
        # TODO, I just noticed that V2 exists
        # Maybe change to V2 in the future
        if stopFreq is None:
            stopFreq = frequency

        m = self.lib.ps3000aSetSigGenBuiltIn(
            c_int16(self.handle),
            c_int32(int(offsetVoltage * 1000000)),
            c_int32(int(pkToPk * 1000000)),
            c_int16(waveType),
            c_float(frequency), c_float(stopFreq),
            c_float(increment), c_float(dwellTime),
            c_enum(sweepType), c_enum(0),
            c_uint32(shots), c_uint32(numSweeps),
            c_enum(triggerType), c_enum(triggerSource),
            c_int16(0))
        self.checkResult(m)
Пример #28
0
 def _lowLevelGetValuesBulk(self, numSamples, fromSegment, toSegment,
                            downSampleRatio, downSampleMode, overflow):
     """Copy data from several memory segments at once."""
     overflowPoint = overflow.ctypes.data_as(POINTER(c_int16))
     m = self.lib.ps4000aGetValuesBulk(
         c_int16(self.handle),
         byref(c_int32(numSamples)),
         c_int32(fromSegment),
         c_int32(toSegment),
         c_int32(downSampleRatio),
         c_enum(downSampleMode),
         overflowPoint
     )
     self.checkResult(m)
Пример #29
0
    def _lowLevelGetValuesBulk(self,
                               numSamples, fromSegmentIndex, toSegmentIndex,
                               downSampleRatio, downSampleRatioMode,
                               overflow):
        noOfSamples = c_uint32(numSamples)

        m = self.lib.ps6000GetValuesBulk(
            c_int16(self.handle),
            byref(noOfSamples),
            c_uint32(fromSegmentIndex), c_uint32(toSegmentIndex),
            c_uint32(downSampleRatio), c_enum(downSampleRatioMode),
            overflow.ctypes.data_as(POINTER(c_int16))
            )
        self.checkResult(m)
        return noOfSamples.value
Пример #30
0
    def _lowLevelSetDataBuffer(self, channel, data, downSampleMode, segmentIndex):
        """
        data should be a numpy array.

        Be sure to call _lowLevelClearDataBuffer
        when you are done with the data array
        or else subsequent calls to GetValue will still use the same array.

        segmentIndex is unused, but required by other versions of the API (eg PS5000a)

        """
        numSamples = len(data)

        m = self.lib.ps4000aSetDataBuffer(c_int16(self.handle), c_enum(channel),
                                          byref(data), c_uint32(numSamples),
                                          c_uint32(segmentIndex), c_uint32(downSampleMode))
        self.checkResult(m)
Пример #31
0
 def GetCurrentHistogram(self, ch, H):
     counts, real_t, dead_t, acqStatus = c_uint32(), c_uint64(), c_uint64(
     ), c_enum()
     R = self.RQ(
         self.dpplib.CAENDPP_GetCurrentHistogram(self.handle, c_int32(ch),
                                                 byref(H), byref(counts),
                                                 byref(real_t),
                                                 byref(dead_t),
                                                 byref(acqStatus)))
     if R:
         return {
             'counts': counts.value,
             'real_t': float('{:.8f}'.format(real_t.value * 1e-9)),
             'dead_t': float('{:.8f}'.format(dead_t.value * 1e-9)),
             'acqStatus': acqStatus.value
         }
     else:
         return False
Пример #32
0
    def _lowLevelSetDataBuffer(self, channel, data, downSampleMode,
                               segmentIndex):
        """
        data should be a numpy array.

        Be sure to call _lowLevelClearDataBuffer
        when you are done with the data array
        or else subsequent calls to GetValue will still use the same array.

        segmentIndex is unused, but required by other versions of the API (eg PS5000a)

        """
        dataPtr = data.ctypes.data_as(POINTER(c_int16))
        numSamples = len(data)

        m = self.lib.ps4000SetDataBuffer(c_int16(self.handle), c_enum(channel),
                                         dataPtr, c_uint32(numSamples))
        self.checkResult(m)
Пример #33
0
    def _lowLevelSetDataBuffer(self, channel, data, downSampleMode,
                               segmentIndex):
        """Set the data buffer.

        Be sure to call _lowLevelClearDataBuffer
        when you are done with the data array
        or else subsequent calls to GetValue will still use the same array.

        segmentIndex is unused, but required by other versions of the API
        (eg PS5000a)
        """
        numSamples = len(data)

        m = self.lib.ps4000aSetDataBuffer(c_int16(self.handle),
                                          c_enum(channel), byref(data),
                                          c_uint32(numSamples),
                                          c_uint32(segmentIndex),
                                          c_uint32(downSampleMode))
        self.checkResult(m)
Пример #34
0
    def _lowLevelGetValues(self, numSamples, startIndex, downSampleRatio,
                           downSampleMode, segmentIndex):

        #TODO: Check overflow in channelBuffersLen against numSamples, but need to
        #      not raise error if channelBuffersPtr is void

        overflow = c_int16()
        numSamples = c_uint32(numSamples)
        m = self.lib.ps4000aGetValues(
            c_int16(self.handle),
            c_uint32(startIndex),
            byref(numSamples),
            c_uint32(downSampleRatio),  #downsample factor
            c_enum(downSampleMode),
            c_uint32(segmentIndex),
            byref(overflow))
        if m == 0:
            return (numSamples.value, overflow.value)
        else:
            self.checkResult(m)
Пример #35
0
    def _lowLevelGetTriggerTimeOffset(self, segmentIndex):
        time = c_uint64()
        timeUnits = c_enum()

        m = self.lib.ps6000GetTriggerTimeOffset64(c_int16(self.handle), byref(time),
                                                  byref(timeUnits), c_uint32(segmentIndex))
        self.checkResult(m)

        if timeUnits.value == 0:    # PS6000_FS
            return time.value * 1E-15
        elif timeUnits.value == 1:  # PS6000_PS
            return time.value * 1E-12
        elif timeUnits.value == 2:  # PS6000_NS
            return time.value * 1E-9
        elif timeUnits.value == 3:  # PS6000_US
            return time.value * 1E-6
        elif timeUnits.value == 4:  # PS6000_MS
            return time.value * 1E-3
        elif timeUnits.value == 5:  # PS6000_S
            return time.value * 1E0
        else:
            raise TypeError("Unknown timeUnits %d" % timeUnits.value)
Пример #36
0
 def _lowLevelClearDataBuffer(self, channel, segmentIndex):
     """Clear the data in the picoscope."""
     m = self.lib.ps2000aSetDataBuffer(
         c_int16(self.handle), c_enum(channel),
         c_void_p(), c_uint32(0), c_uint32(segmentIndex), c_enum(0))
     self.checkResult(m)
Пример #37
0
    def _lowLevelRunStreaming(self, sampleInterval, sampleIntervalTimeUnits, maxPreTriggerSamples, maxPostTriggerSamples, autoStop, downSampleRatio, downSampleRatioMode, overviewBufferSize):
        sampleInterval_c=c_uint32(sampleInterval)
        m = self.lib.ps5000aRunStreaming(c_int16(self.handle), byref(sampleInterval_c), c_enum(sampleIntervalTimeUnits), c_uint32(maxPreTriggerSamples), c_uint32(maxPostTriggerSamples), c_int16(autoStop), c_uint32(downSampleRatio), c_enum(downSampleRatioMode), c_uint32(overviewBufferSize))
        self.streamReady=False
        self.checkResult(m)
        print(sampleInterval_c)

        return
Пример #38
0
 def _lowLevelSetDeviceResolution(self, resolution):
     self.resolution = resolution
     m = self.lib.ps4000aSetDeviceResolution(
         c_int16(self.handle),
         c_enum(resolution))
     self.checkResult(m)
Пример #39
0
 def SetInputRange(self, ch):
     ir = c_enum(self.inputRange[ch])
     return self.RQ(
         self.dpplib.CAENDPP_SetInputRange(self.handle, c_int32(ch), ir))
Пример #40
0
 def _lowLevelChangePowerSource(self, powerstate):
     m = self.lib.ps5000aChangePowerSource(c_int16(self.handle),
                                           c_enum(powerstate))
     self.checkResult(m)
Пример #41
0
 def _lowLevelSetExtTriggerRange(self, VRange):
     m = self.lib.ps4000SetExtTriggerRange(c_int16(self.handle),
                                           c_enum(VRange))
     self.checkResult(m)
Пример #42
0
    def _lowLevelSigGenSoftwareControl(self, triggerType):

        m = self.lib.ps4000SigGenSoftwareControl(c_int16(self.handle),
                                                 c_enum(triggerType))
        self.checkResult(m)
Пример #43
0
 def _lowLevelClearDataBuffer(self, channel, segmentIndex):
     m = self.lib.ps4000SetDataBuffer(c_int16(self.handle), c_enum(channel),
                                      c_void_p(), c_uint32(0), c_enum(0))
     self.checkResult(m)
Пример #44
0
 def _lowLevelClearDataBuffer(self, channel, segmentIndex):
     """data should be a numpy array."""
     m = self.lib.ps4000aSetDataBuffer(c_int16(self.handle),
                                       c_enum(channel), c_void_p(),
                                       c_uint32(0), c_uint32(0), c_enum(0))
     self.checkResult(m)
Пример #45
0
class CAEN_DPP(HVPS, DGTZ):
    dpplib = cdll.LoadLibrary("libCAENDPPLib.so")
    linknum = 0
    acqMode = 0  # Waveform = 0, Histogram = 1
    trigger = 0  # Normal= 0, Auto = 1
    link = DPP_ConnectionParams()
    link.LinkType = link.LinkTypes['USB']
    boardConfig = DPP_DgtzParams()
    inputRange = [0] * MAX_NUMCHB
    inputRanges = [
        float(e.replace(",", ".")) for e in DPP_Probes["InputRanges"]
    ]
    boardInfo = DPP_Info()
    Traces = DPP_Traces()
    is_board_acq = c_int32()
    is_chann_acq = c_enum()

    def RQ(self, s):
        if not s: return True
        else:
            print(DPP_ErrorCode[s])
            return False

    def InitLibrary(self):
        self.handle = c_int32(-1)
        return self.RQ(self.dpplib.CAENDPP_InitLibrary(byref(self.handle)))

    def AddBoard(self):
        self.boardId = c_int32()
        self.link.LinkNum = c_int32(self.linknum)
        return self.RQ(
            self.dpplib.CAENDPP_AddBoard(self.handle, self.link,
                                         byref(self.boardId)))

    def EndLibrary(self):
        return self.RQ(self.dpplib.CAENDPP_EndLibrary(self.handle))

    def ResetConfiguration(self):
        return self.RQ(
            self.dpplib.CAENDPP_ResetConfiguration(self.handle, self.boardId))

    def GetDPPInfo(self):
        return self.RQ(
            self.dpplib.CAENDPP_GetDPPInfo(self.handle, self.boardId,
                                           byref(self.boardInfo)))

    def CheckBoardCommunication(self):
        return self.RQ(
            self.dpplib.CAENDPP_CheckBoardCommunication(
                self.handle, self.boardId))

    def GetInfoDict(self, attr_number, attr_list):
        R = {}
        for r in range(getattr(self.boardInfo, attr_number)):
            num = getattr(self.boardInfo, attr_list)[r]
            name = DPP_Probes[attr_list][num]
            R[name] = num


#      print(r, num, name)
        return R

    def GetBoardConfiguration(self):
        self.acqcMode = c_enum(self.acqMode)
        return self.RQ(
            self.dpplib.CAENDPP_GetBoardConfiguration(self.handle,
                                                      self.boardId,
                                                      byref(self.acqcMode),
                                                      byref(self.boardConfig)))

    def SetBoardConfiguration(self):
        self.acqcMode = c_enum(self.acqMode)
        return self.RQ(
            self.dpplib.CAENDPP_SetBoardConfiguration(self.handle,
                                                      self.boardId,
                                                      self.acqcMode,
                                                      self.boardConfig))

    def Board_Reconfigure(self, ch):
        status = self.IsChannelAcquiring(ch)
        if status != 0: self.StopAcquisition(ch)
        self.SetBoardConfiguration()
        if status != 0: self.StartAcquisition(ch)
Пример #46
0
 def _lowLevelSetChannel(self, chNum, enabled, coupling, VRange, VOffset,
                         BWLimited):
     m = self.lib.ps4000aSetChannel(c_int16(self.handle), c_enum(chNum),
                                    c_int16(enabled), c_enum(coupling),
                                    c_enum(VRange), c_float(VOffset))
     self.checkResult(m)
Пример #47
0
 def _lowLevelSetBandwidthFilter(self, channel, bandwidth):
     m = self.lib.ps5000aSetBandwidthFilter(c_int16(self.handle),
                                            c_enum(channel),
                                            c_enum(bandwidth))
     self.checkResult(m)
Пример #48
0
 def _lowLevelClearDataBuffers(self, channel):
     m = self.lib.ps4000aSetDataBuffers(c_int16(self.handle),
                                        c_enum(channel), c_void_p(),
                                        c_void_p(), c_uint32(0))
     self.checkResult(m)
Пример #49
0
                ("RampDown", c_double), ("VMax", c_double), ("PWDownMode",
                                                             c_int32))


# D P P   P A R A M E T E R S   S E C T I O N

MAX_GW = 1000  # Max number of generic write register in the Config File
MAX_NUMCHB = 16  # Max number of channels per board
MAX_NUMCHB_COINCIDENCE = MAX_NUMCHB + 1  # Max number of channels for coincidences (add external channel)
MAX_LISTFILE_LENGTH = 155  # Max binary file filename length
MAX_LIST_BUFF_NEV = 8192  # Max size of the list events memory buffer
MAX_GPIO_NUM = 2
MAX_RUNNAME = 128

DPP_ParamID = {
    'RecordLength': c_enum(0),
    'PreTrigger': c_enum(1),
    'Decay': c_enum(2),
    'TrapRise': c_enum(3),
    'TrapFlat': c_enum(4),
    'TrapFlatDelay': c_enum(5),
    'Smoothing': c_enum(6),
    'InputRise': c_enum(7),
    'Threshold': c_enum(8),
    'NSBL': c_enum(9),
    'NSPK': c_enum(10),
    'PKHO': c_enum(11),
    'BLHO': c_enum(12),
    'TRGHO': c_enum(13),
    'DGain': c_enum(14),
    'ENF': c_enum(15),