else:
        alniter = sam.fetch(until_eof=True)

    for aln in alniter:
#        print aln.pos, dir(aln)
        nr+=1
        if nr%200000 == 0:
            sys.stderr.write("%d\n"%nr)

        i,j = aln.tid, aln.rnext
        if args.debug: print([i,j,int(aln.mapq),aln.tlen,aln.is_duplicate])

        if int(aln.mapq) < args.min_qual: continue
        if BamTags.mate_mapq(aln) < args.min_qual: continue
        if aln.is_duplicate : continue
        if args.junctions and BamTags.junction(aln) != "T": continue

        if i==j:
            if (slen[i]<args.minlength) : continue
            if aln.tlen < 0: continue
            hist[aln.tlen] = hist.get(aln.tlen,0)+1
            n+=1
        else:
            if (slen[i]<args.minlength) or (slen[j]<args.minlength) : continue
            if not aln.is_read1: continue
            x = min( aln.pos , slen[i] - aln.pos ) + min( aln.pnext,slen[j]-aln.pnext)
            hist2[x] = hist2.get(x,0)+1 
            n2+=1

        if args.head and (n+n2)>args.head:
            break