require 'mkfifo' require 'parallel' module Bio class Gadget < Thor desc 'peak WIG1,WIG2,... [GTF]', < Parallel.processor_count) { |chr| # chr2exon[chr].each { |str, oid, exn, start, stop| # peak = '' poss = Hash.new nchrpos2val.each { |n, chrpos2val| if chrpos2val.key?(chr) pos2val = chrpos2val[chr] tmppos2val = Hash.new pos2val.each { |pos, val| tmppos2val[pos] = val if start <= pos && pos <= stop } if tmppos2val.size > 0 tmpposs = tmppos2val.keys.sort { |a, b| tmppos2val[b] == tmppos2val[a] ? (str == '+' ? (a <=> b) : (b <=> a)) : (tmppos2val[b] <=> tmppos2val[a]) } tmppos = tmpposs[0] # puts "#{n} | #{chr}:#{start}-#{stop} #{str} | #{tmpposs}" poss[tmppos] = poss.key?(tmppos) ? poss[tmppos]+1 : 1 end end } if poss.size > 0 peaks = poss.keys.sort { |a, b| poss[b] == poss[a] ? (str == '+' ? (a <=> b) : (b <=> a)) : (poss[b] <=> poss[a]) } peak = peaks[0] end # fp.syswrite([oid, exn, peak].join("\t") + "\n") } # } fp.close Process.waitall end end end