docs: def load_time_data(self, RelativeChannelNo=None, SampleFreq=None, PointsToLoad=-1, NormaliseByMonitorOutput=False):
          """
          Loads the time and voltage data and the wave description from the associated file.
  
          Parameters
          ----------
          RelativeChannelNo : int, optional
               Channel number for loading saleae data files
               If loading a .dat file produced by the labview NI5122 daq card, used to 
               specifiy the channel number if two channels where saved, if left None with 
               .dat files it will assume that the file to load only contains one channel.
               If NormaliseByMonitorOutput is True then RelativeChannelNo specifies the 
               monitor channel for loading a .dat file produced by the labview NI5122 daq card.
          SampleFreq : float, optional
               Manual selection of sample frequency for loading labview NI5122 daq files
          PointsToLoad : int, optional
               Number of first points to read. -1 means all points (i.e., the complete file)
               WORKS WITH NI5122 DATA SO FAR ONLY!!!
          NormaliseByMonitorOutput : bool, optional
               If True the particle signal trace will be divided by the monitor output, which is
               specified by the channel number set in the RelativeChannelNo parameter. 
               WORKS WITH NI5122 DATA SO FAR ONLY!!!
          """
          f = open(self.filepath, 'rb')
          raw = f.read()
          f.close()
          FileExtension = self.filepath.split('.')[-1]
          if FileExtension == "raw" or FileExtension == "trc":
              with _warnings.catch_warnings(): # supress missing data warning and raise a missing
                  # data warning from optoanalysis with the filepath
                  _warnings.simplefilter("ignore")
                  waveDescription, timeParams, self.voltage, _, missingdata = optoanalysis.LeCroy.InterpretWaveform(raw, noTimeArray=True) 
              if missingdata:
                  _warnings.warn("Waveform not of expected length. File {} may be missing data.".format(self.filepath))
              self.SampleFreq = (1 / waveDescription["HORIZ_INTERVAL"])
          elif FileExtension == "bin":
              if RelativeChannelNo == None:
                  raise ValueError("If loading a .bin file from the Saleae data logger you must enter a relative channel number to load")
              timeParams, self.voltage = optoanalysis.Saleae.interpret_waveform(raw, RelativeChannelNo)
              self.SampleFreq = 1/timeParams[2]
          elif FileExtension == "dat": #for importing a file written by labview using the NI5122 daq card
              if SampleFreq == None:
                  raise ValueError("If loading a .dat file from the NI5122 daq card you must enter a SampleFreq")
              if RelativeChannelNo == None:
                  self.voltage = _np.fromfile(self.filepath, dtype='>h',count=PointsToLoad)
              elif RelativeChannelNo != None:
                  filedata = _np.fromfile(self.filepath, dtype='>h',count=PointsToLoad)
                  if NormaliseByMonitorOutput == True:
                      if RelativeChannelNo == 0:
                          monitorsignal = filedata[:len(filedata):2]
                          self.voltage = filedata[1:len(filedata):2]/monitorsignal
                      elif RelativeChannelNo == 1:
                          monitorsignal = filedata[1:len(filedata):2]
                          self.voltage = filedata[:len(filedata):2]/monitorsignal
                  elif NormaliseByMonitorOutput == False:
                      self.voltage = filedata[RelativeChannelNo:len(filedata):2]
              timeParams = (0,(len(self.voltage)-1)/SampleFreq,1/SampleFreq)
              self.SampleFreq = 1/timeParams[2]
          elif FileExtension == "tdms": # for importing a file written by labview form the NI7961 FPGA with the RecordDataPC VI
              if SampleFreq == None:
                  raise ValueError("If loading a .tdms file saved from the FPGA you must enter a SampleFreq")
              self.SampleFreq = SampleFreq
              dt = 1/self.SampleFreq
              FIFO_SIZE = 262143 # this is the maximum size of the DMA FIFO on the NI 7961 FPGA with the NI 5781 DAC card
              tdms_file = _TdmsFile(self.filepath)
              channel = tdms_file.object('Measured_Data', 'data')
              data = channel.data[FIFO_SIZE:] # dump first 1048575 points of data
              # as this is the values that had already filled the buffer
              # from before when the record code started running
              volts_per_unit = 2/(2**14)
              self.voltage = volts_per_unit*data
              timeParams = [0, (data.shape[0]-1)*dt, dt]
          elif FileExtension == 'txt': # .txt file created by LeCroy Oscilloscope
              data = []
              with open(self.filepath, 'r') as csvfile:
                  reader = csv.reader(csvfile)
                  for row in reader:
                      data.append(row)
              data = _np.array(data[5:]).astype(float).transpose()
              t0 = data[0][0]
              tend = data[0][-1]
              dt = data[0][1] - data[0][0]
              self.SampleFreq = 1/dt
              self.voltage = data[1]
              del(data)
              timeParams = [t0, tend, dt]
          else:
              raise ValueError("Filetype not supported")
          startTime, endTime, Timestep = timeParams
          self.timeStart = startTime
          self.timeEnd = endTime
          self.timeStep = Timestep
          self.time = frange(startTime, endTime+Timestep, Timestep)
          return None