code: def fix(args):
      
      p = OptionParser(fix.__doc__)
      p.add_option("--minspan", default=0, type="int",
                   help="Enforce minimum span [default: %default]")
      p.set_outfile()
      opts, args = p.parse_args(args)
  
      if len(args) != 1:
          sys.exit(not p.print_help())
  
      bedfile, = args
      minspan = opts.minspan
      fp = open(bedfile)
      fw = must_open(opts.outfile, "w")
      nfixed = nfiltered = ntotal = 0
      for row in fp:
          atoms = row.strip().split("\t")
          assert len(atoms) >= 3, "Must be at least 3 columns"
          seqid, start, end = atoms[:3]
          start, end = int(start), int(end)
          orientation = '+'
          if start > end:
              start, end = end, start
              orientation = '-'
              nfixed += 1
  
          atoms[1:3] = [str(start), str(end)]
          if len(atoms) > 6:
              atoms[6] = orientation
          line = "\t".join(atoms)
          b = BedLine(line)
  
          if b.span >= minspan:
              print(b, file=fw)
              nfiltered += 1
  
          ntotal += 1
  
      if nfixed:
          logging.debug("Total fixed: {0}".format(percentage(nfixed, ntotal)))
      if nfiltered:
          logging.debug("Total filtered: {0}".format(percentage(nfiltered, ntotal)))
docs: %prog fix bedfile > newbedfile
  
      Fix non-standard bed files. One typical problem is start > end.