Hi everyone,
I’m new to Ruby and am encountering a problem with an error message that
I don’t quite understand. I am hoping someone more experienced can
explain where I have gone wrong. Any help would be much appreciated.
When I do not specify parameters, I get no errors:
ruby ~/Ruby_code/Align_against_reference.rb “temp.fastq”
“temp.alignment”
…done
Run options:
Running tests:
…
Finished tests in 0.007649s, 784.4163 tests/s, 6144.5941 assertions/s.
6 tests, 47 assertions, 0 failures, 0 errors, 0 skips
But when I specify which lines of the file to process, I get the
following:
ruby ~/Ruby_code/Align_against_reference.rb “temp.fastq”
“temp.alignment” 0 40
…done
/home/lok2/bin/ruby/lib/ruby/1.9.1/test/unit.rb:167:in block in non_options': file not found: 0 (ArgumentError) from /home/lok2/bin/ruby/lib/ruby/1.9.1/test/unit.rb:146:in
map!’
from /home/lok2/bin/ruby/lib/ruby/1.9.1/test/unit.rb:146:in
non_options' from /home/lok2/bin/ruby/lib/ruby/1.9.1/test/unit.rb:207:in
non_options’
from /home/lok2/bin/ruby/lib/ruby/1.9.1/test/unit.rb:52:in
process_args' from /home/lok2/bin/ruby/lib/ruby/1.9.1/minitest/unit.rb:891:in
_run’
from /home/lok2/bin/ruby/lib/ruby/1.9.1/minitest/unit.rb:884:in
run' from /home/lok2/bin/ruby/lib/ruby/1.9.1/test/unit.rb:21:in
run’
from /home/lok2/bin/ruby/lib/ruby/1.9.1/test/unit.rb:326:in
block (2 levels) in autorun' from /home/lok2/bin/ruby/lib/ruby/1.9.1/test/unit.rb:27:in
run_once’
from /home/lok2/bin/ruby/lib/ruby/1.9.1/test/unit.rb:325:in
`block in autorun’
My script:
require("/home/lok2/Ruby_code/SeqRead.rb")
start = ARGV[2].to_i
stop = ARGV[3].to_i == 0 ? :eof : ARGV[3].to_i
fastq = FastxReader.new
fastq.readSingleEnd(ARGV[0], start, stop)
pL = DNA.new(“TGC CGG AGT CAG CGT”) # 5’ -> 3’ left primer
pR = DNA.new(“AGT CAG AGT CGC CAC”) # 5’ -> 3’ right primer
sm = {
‘AA’ => 1, ‘AG’ => 0, ‘AC’ => 0, ‘AT’ => 0,
‘GA’ => 0, ‘GG’ => 1, ‘GC’ => 0, ‘GT’ => 0,
‘CA’ => 0, ‘CG’ => 0, ‘CC’ => 1, ‘CT’ => 0,
‘TA’ => 0, ‘TG’ => 0, ‘TC’ => 0, ‘TT’ => 1
}
insert =
DNA.new(“CTGTTCTCCCTACATCAAATGTCTATCCCCGCACCAAGTGGAGATTCCATGAGGATGAGG”)
def align(reference, test, similarity_matrix, gapPenality=0)
aln = NW.new(reference, test, similarity_matrix, gapPenality)
if (aln.score == reference.length)
return aln
else
aln2 = NW.new(reference, test.rev_comp.reverse, similarity_matrix,
gapPenality)
end
temp =(aln.score > aln2.score) ? aln : aln2
return(temp)
end
temp = File.open(ARGV[1], “w”)
alignments = fastq.reads.each do |read|
temp.puts “>” + read.readName
temp.puts “Sequence:”
temp.puts read.dna_seq
aln=align(insert, read.stripPrimers(pL, pR), sm, 0)
print “.”
temp.puts “Alignment:”
temp.puts aln.display
temp.puts “Errors:”
temp.puts aln.errors
temp.puts “\n”
end
Here are the relevant parts from SeqRead.rb
class FastxReader
attr_reader :reads, :type
def initialize(type=:fastq)
@type = type
@reads = []
end
def readSingleEnd (fastx_file, startline=0, endline=:eof)
file = File.open(fastx_file, “r”)
endline=File.foreach(fastx_file).inject(0){|c, l| c+1} if endline ==
:eof
(0…startline).each {|x| file.readline}
while file.lineno < endline && !file.eof? do
@reads << readRecord(file, @type)
end
file.close
end
def readPairedEnd (fastx_file_1, fastx_file_2)
fileA = File.open(fastx_file_1)
fileB = File.open(fastx_file_2)
while !fileA.eof? && !fileB.eof? do
readA = readRecord(fileA, @type)
readB = readRecord(fileB, @type)
@reads << PairedEndRead.new(readA, readB)
end
fileA.close
fileB.close
end
def readRecord(fastxFile, fileType=:fastq)
record = []
if fileType == :fastq
4.times {|x| record << fastxFile.gets.strip}
SeqRead.new(record[1], record[3], record[0].split("
").first).stripPrimer(“N”)
elsif filetype == :fasta
2.times {|x| record << fastxFile.gets.strip}
SeqRead.new(record[1], record[0]).stripPrimer(“N”)
else
throw ArgumentError
end
end
end