def process_locus(lr, srin, args):
    if len(lr) == 0: return None
    totalrange = get_total_range(lr)
    #print '^^^^ Locus ^^^^'
    #print totalrange.get_range_string()
    #print str(len(lr))+"\t"+str(len(sr))+"\t"+str(len(srjun))
    # Get fuzzys from of all short reads
    sr = {}
    #do this more time consuming cutdown ont he SR data after sending to a thread
    for srgpd in srin:
        srfz = GenePredFuzzyBasics.FuzzyGenePred(
            srgpd, juntol=args.junction_tolerance)
        for j in srfz.fuzzy_junctions:
            junstr = j.left.chr + ':' + str(j.left.end) + ',' + str(
                j.right.end)
            if junstr not in sr:
                sr[junstr] = {}
                sr[junstr]['cnt'] = 0
                sr[junstr]['fzjun'] = j
            sr[junstr]['cnt'] += 1

    #srfzs = [GenePredFuzzyBasics.FuzzyGenePred(x) for x in srjun]
    #for i in range(0,len(srfzs)): srfzs[i].gpds[0].entry['name'] = 'SR_'+str(i)
    fzs = GenePredFuzzyBasics.greedy_gpd_list_to_combined_fuzzy_list(
        lr, args.junction_tolerance)
    #print str(len(fzs)) + " genepreds"
    outputs = []
    #if args.threads > 1:
    #  p = Pool(processes=args.threads)
    for fz in fzs:
        #if args.by_read:
        #  if args.threads > 1 and args.by_read:
        #    p.apply_async(do_fuzzy,args=(fz,sr,args),callback=do_outs)
        #  else:
        #    outs = do_fuzzy(fz,sr,args)
        #    do_outs([outs,totalrange])
        #else:
        outs = do_fuzzy(fz, sr, args)
        #  do_outs([outs,totalrange])
        for o in outs:
            outputs.append(o)
    #if args.threads > 1 and args.by_read:
    #  p.close()
    #  p.join()
    #if not args.by_read:
    return [outputs, totalrange]