From: "Ken L." Date: 2012-09-06T01:33:02+09:00 Subject: Newbie needs help 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 -- Posted via http://www.ruby-forum.com/.