After getting all the best alignment counts we can traverse again
       to keep the best

def _do_subread_set(flag,input_file,of,negative_filter,aligned):
    best = {}
    cmd = 'samtools view '+flag+' '+input_file
    sys.stderr.write(cmd+"\n")
    p = Popen(cmd.split(),stdout=PIPE)
    z = 0
    for line in p.stdout:
      z += 1
      if z%10000==0: sys.stderr.write(str(z) + " subread alignment paths scanned for alignment length\r")
      pbname = PacBioReadName(_nameprog.match(line).group(1))
      mol = pbname.get_molecule()
      if mol in negative_filter: continue
      name = pbname.name()
      sam = SAM(line)
      c = 0 # aligned base count if we are aligned, subread length if we are not aligned
      if aligned:
        c = sam.get_aligned_bases_count()
      else:
        c = sam.get_query_length()
      if mol not in best:
        best[mol] = [name,c]
      if c > best[mol][1]: best[mol] = [name,c]
    p.communicate()
    sys.stderr.write("\n")
    sys.stderr.write("Finished analyzing subread lengths\nWriting aligned subreads\n")
    """After getting all the best alignment counts we can traverse again
       to keep the best"""
    cmd = 'samtools view '+flag+' '+input_file
    sys.stderr.write(cmd+"\n")
    z = 0
    p = Popen(cmd.split(),stdout=PIPE)
    for line in p.stdout:
      z += 1
      if z%10000==0: sys.stderr.write(str(z) + " subreads alignment paths scanned during selected for best\r")
      pbname = PacBioReadName(_nameprog.match(line).group(1))
      mol = pbname.get_molecule()
      name = pbname.name()
      if mol in negative_filter: continue
      if not best[mol][0] == name: continue
      of.write(line)
    p.communicate()
    for mol in best: negative_filter.add(mol)
    sys.stderr.write("\n")
    sys.stderr.write("molecules written: "+str(len(negative_filter))+"\n")
    return negative_filter