Checks the stimulus, including expanded parameters for invalidating conditions

        :param windowSize: acquistion (recording) window size (seconds)
        :type windowSize: float
        :returns: str -- error message, if any, 0 otherwise

def verify(self, windowSize=None):
        """Checks the stimulus, including expanded parameters for invalidating conditions

        :param windowSize: acquistion (recording) window size (seconds)
        :type windowSize: float
        :returns: str -- error message, if any, 0 otherwise"""
        if self.samplerate() is None:
            return "Multiple recording files with conflicting samplerates"
        msg = self._autoParams.verify()
        if msg:
            return msg
        if self.traceCount() == 0:
            return "Test is empty"
        if windowSize is not None:
            durations = self.expandFunction(self.duration)
            # print 'windowSize', windowSize, 'self', durations[0],  durations[-1]
            # ranges are linear, so we only need to test first and last
            if durations[0] > windowSize or durations[-1] > windowSize:
                return "Stimulus duration exceeds window duration"
        msg = self.verifyExpanded(self.samplerate())
        if msg:
            return msg
        if self.caldb is None or self.calv is None:
            return "Test reference voltage not set"
        if None in self.voltage_limits:
            return "Device voltage limits not set"
        return 0