<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def readSignal(self, chn, start=0, n=None):
 """ Returns the physical data of signal chn. When start and n is set, a subset is returned Parameters chn : int channel number start : int start pointer (default is 0) n : int length of data to read (default is None, by which the complete data of the channel are returned) Examples -------- 1000 120000 """

        if start < 0:
            return np.array([])
        if n is not None and n < 0:
            return np.array([])
        nsamples = self.getNSamples()
        if chn < len(nsamples):
            if n is None:
                n = nsamples[chn]
            elif n > nsamples[chn]:
                return np.array([])
            x = np.zeros(n, dtype=np.float64)
            self.readsignal(chn, start, n, x)
            return x
        else:
            return np.array([])