class Fixer

Public Class Methods

new() click to toggle source
# File lib/fix-trinity-output/fix-trinity-output.rb, line 5
def initialize

end

Public Instance Methods

run(left, right, prefix) click to toggle source
# File lib/fix-trinity-output/fix-trinity-output.rb, line 9
def run left, right, prefix
  leftout = ""
  rightout = ""
  buffersize = 200000
  buffer = 0
  data = {}
  cont = true
  lh = File.open(left)
  rh = File.open(right)
  lout = File.open("#{prefix}-fixed.1.fastq", "w")
  rout = File.open("#{prefix}-fixed.2.fastq", "w")
  count=0
  name1 = lh.readline.chomp rescue nil
  name2 = rh.readline.chomp rescue nil
  while cont
    seq1 = lh.readline rescue nil
    plus1 = lh.readline rescue nil
    quals1 = lh.readline rescue nil
    seq2 = rh.readline rescue nil
    plus2 = rh.readline rescue nil
    quals2 = rh.readline rescue nil

    if name1
      shortname1 = name1[0..-3]
      if data[shortname1]
        leftout << "#{name1}\n#{seq1}+\n#{quals1}"
        rightout << data[shortname1][1]
        buffer+=1
        data.delete(shortname1)
        if buffer>=buffersize
          lout.write leftout
          leftout=""
          rout.write rightout
          rightout=""
          buffer=0
        end
      else
        data[shortname1]=[]
        data[shortname1][0]="#{name1}\n#{seq1}+\n#{quals1}"
      end
    end
    if name2
      shortname2 = name2[0..-3]
      if data[shortname2]
        leftout << data[shortname2][0]
        rightout << "#{name2}\n#{seq2}+\n#{quals2}"
        buffer+=1
        data.delete(shortname2)
        if buffer>=buffersize
          lout.write leftout
          leftout=""
          rout.write rightout
          rightout=""
          buffer=0
        end
      else
        data[shortname2]=[]
        data[shortname2][1]="#{name2}\n#{seq2}+\n#{quals2}"
      end
    end

    name1 = lh.readline.chomp rescue nil
    name2 = rh.readline.chomp rescue nil
    if name1==nil and name2==nil
      cont=false
    end
  end

  lout.write leftout
  rout.write rightout
  lout.close
  rout.close

  File.open("#{prefix}-fixed.single.fastq", "w") do |out|
    data.each do |name, list|
      if list
        if list[0]
          out.write list[0]
        end
        if list[1]
          out.write list[1]
        end
      end
    end
  end

end