code: def get_cycles(self):
          cycles = self.rater.find('cycles')
          if not cycles:
              return None
          starts = sorted(
                  [float(mrkr.text) for mrkr in cycles.findall('cyc_start')])
          ends = sorted(
                  [float(mrkr.text) for mrkr in cycles.findall('cyc_end')])
          cyc_list = []
          if not starts or not ends:
              return None
          if all(i < starts[0] for i in ends):
              raise ValueError('First cycle has no start.')
          for (this_start, next_start) in zip(starts, starts[1:] + [inf]):
              end_between_starts = [end for end in ends \
                                    if this_start < end <= next_start]
              if len(end_between_starts) > 1:
                  raise ValueError('Found more than one cycle end for same '
                                   'cycle')
              if end_between_starts:
                  one_cycle = (this_start, end_between_starts[0])
              else:
                  one_cycle = (this_start, next_start)
              if one_cycle[1] == inf:
                  raise ValueError('Last cycle has no end.')
              cyc_list.append(one_cycle)
          output = []
          for i, j in enumerate(cyc_list):
              cyc = j[0], j[1], i + 1
              output.append(cyc)
          return output