[#380721] Can you search in REXML by attributes? — "Kyle X." <haebooty@...>

Hello and thank you to all the wonderful and helpful people at this

19 messages 2011/04/01
[#380737] Re: Can you search in REXML by attributes? — Robert Klemme <shortcutter@...> 2011/04/01

On Fri, Apr 1, 2011 at 2:53 AM, Kyle X. <haebooty@yahoo.com> wrote:

[#380755] Re: Can you search in REXML by attributes? — "Kyle X." <haebooty@...> 2011/04/01

Robert K. wrote in post #990336:

[#380762] Searching a CSV file - beginner seeking help — Simon Harrison <simon@...>

Hi all. I've written a little script to search a csv file for films. It

10 messages 2011/04/01

[#380843] Using grep on subarrays - help! — Simon Harrison <simon@...>

Can anyone help with this? I thought grep would find any element that

12 messages 2011/04/03

[#380849] Splitting each_cons? — Simon Harrison <simon@...>

I'm not sure if each_cons can do what I'm trying to achieve:

13 messages 2011/04/03

[#380883] pipe question — wolf volpi <wolf_volpi@...>

What does the pipe in this example do?

15 messages 2011/04/04

[#380949] functional languages -- any recommendations? — 7stud -- <bbxx789_05ss@...>

Haskell, Scala, or Erlang? Which one is the best?

18 messages 2011/04/05

[#380977] Separate new lines from an output — "Leo M." <leo.mmcm@...>

Hello!

12 messages 2011/04/05

[#381015] Match a pattern multiple times, returning matches, captures and offset? — Markus Fischer <markus@...>

Hi,

10 messages 2011/04/05

[#381035] capture the output of a grandchild — Chandan Bansal <chandan89@...>

hi

12 messages 2011/04/06

[#381075] Hello — Moises Montenegro <moemonty@...>

Hello,

43 messages 2011/04/06
[#381086] Re: Hello — James Nathan <badlands_2004@...> 2011/04/07

hello I am trying to get it stated myself, but I am not sure if I am setting Ruby up right.

[#381155] Re: Hello — James Nathan <badlands_2004@...> 2011/04/08

I am having a hard time to get it up and running. that is Ruby and Ruby on Rails. it seems that no one is willing to help so that we can enjoy this porgram. If their anyway that I can get it downloaded to me, some help to make sure that have the right porgrams.

[#381263] Re: Hello — James Nathan <badlands_2004@...> 2011/04/10

does the Free Ride program for Ruby the command program that I need to run and write my program?

[#381308] Re: Hello — James Nathan <badlands_2004@...> 2011/04/11

is there a disk that we can seen off and use. so that we can all the parts of ruby and ruby on rails. I would like this disk.

[#381313] Re: Hello — jake kaiden <jakekaiden@...> 2011/04/11

James Nathan wrote in post #992175:

[#381314] Re: Hello — Vincent Manis <vmanis@...> 2011/04/11

On 2011-04-11, at 16:50, jake kaiden wrote:

[#381322] Re: Hello — James Nathan <badlands_2004@...> 2011/04/12

I will just give up on Ruby and Ruby on Rails for now=20

[#381347] Re: Hello — James Nathan <badlands_2004@...> 2011/04/12

No, I will try another program to learn to write a program. Ruby is just to=

[#381351] Re: Hello — Phillip Gawlowski <cmdjackryan@...> 2011/04/12

On Tue, Apr 12, 2011 at 3:27 PM, James Nathan <badlands_2004@yahoo.com> wrote:

[#381358] Re: Hello — Martin DeMello <martindemello@...> 2011/04/12

On Tue, Apr 12, 2011 at 7:59 PM, Phillip Gawlowski

[#381087] Hash Surprises with Fixnum, #hash, and #eql? — Clifford Heath <no@...>

Folk,

44 messages 2011/04/07
[#381099] Re: Hash Surprises with Fixnum, #hash, and #eql? — Robert Klemme <shortcutter@...> 2011/04/07

On Thu, Apr 7, 2011 at 6:05 AM, Clifford Heath <no@spam.please.net> wrote:

[#381107] Re: Hash Surprises with Fixnum, #hash, and #eql? — Phillip Gawlowski <cmdjackryan@...> 2011/04/07

On Thu, Apr 7, 2011 at 11:19 AM, Robert Klemme

[#381109] Re: Hash Surprises with Fixnum, #hash, and #eql? — Robert Klemme <shortcutter@...> 2011/04/07

On Thu, Apr 7, 2011 at 1:20 PM, Phillip Gawlowski

[#381115] Re: Hash Surprises with Fixnum, #hash, and #eql? — Phillip Gawlowski <cmdjackryan@...> 2011/04/07

On Thu, Apr 7, 2011 at 1:53 PM, Robert Klemme

[#381182] Re: Hash Surprises with Fixnum, #hash, and #eql? — Clifford Heath <no@...> 2011/04/08

On 04/07/11 19:19, Robert Klemme wrote:

[#381187] Re: Hash Surprises with Fixnum, #hash, and #eql? — Robert Klemme <shortcutter@...> 2011/04/08

On Fri, Apr 8, 2011 at 9:30 AM, Clifford Heath <no@spam.please.net> wrote:

[#381233] Re: Hash Surprises with Fixnum, #hash, and #eql? — Clifford Heath <no@...> 2011/04/09

On 04/08/11 20:12, Robert Klemme wrote:

[#381269] Re: Hash Surprises with Fixnum, #hash, and #eql? — Charles Oliver Nutter <headius@...> 2011/04/11

Top-replying with a general observation: you can't please everyone all the =

[#381274] Re: Hash Surprises with Fixnum, #hash, and #eql? — Clifford Heath <no@...> 2011/04/11

On 04/11/11 10:02, Charles Oliver Nutter wrote:

[#381337] Re: Hash Surprises with Fixnum, #hash, and #eql? — Robert Klemme <shortcutter@...> 2011/04/12

On Mon, Apr 11, 2011 at 5:20 AM, Clifford Heath <no@spam.please.net> wrote:

[#381393] Re: Hash Surprises with Fixnum, #hash, and #eql? — Clifford Heath <no@...> 2011/04/13

On 04/12/11 19:09, Robert Klemme wrote:

[#381399] Re: Hash Surprises with Fixnum, #hash, and #eql? — Charles Oliver Nutter <headius@...> 2011/04/13

On Tue, Apr 12, 2011 at 9:05 PM, Clifford Heath <no@spam.please.net> wrote:

[#381402] Re: Hash Surprises with Fixnum, #hash, and #eql? — Clifford Heath <no@...> 2011/04/13

On 04/13/11 15:51, Charles Oliver Nutter wrote:

[#381416] Re: Hash Surprises with Fixnum, #hash, and #eql? — Charles Oliver Nutter <headius@...> 2011/04/13

On Wed, Apr 13, 2011 at 1:35 AM, Clifford Heath <no@spam.please.net> wrote:

[#381469] Re: Hash Surprises with Fixnum, #hash, and #eql? — Clifford Heath <no@...> 2011/04/13

On 04/13/11 22:23, Charles Oliver Nutter wrote:

[#381506] Re: Hash Surprises with Fixnum, #hash, and #eql? — Charles Oliver Nutter <headius@...> 2011/04/14

On Wed, Apr 13, 2011 at 4:40 PM, Clifford Heath <no@spam.please.net> wrote:

[#381510] Re: Hash Surprises with Fixnum, #hash, and #eql? — Clifford Heath <no@...> 2011/04/14

On 04/14/11 15:36, Charles Oliver Nutter wrote:

[#381876] Re: Hash Surprises with Fixnum, #hash, and #eql? — Charles Oliver Nutter <headius@...> 2011/04/19

On Thu, Apr 14, 2011 at 12:55 AM, Clifford Heath <no@spam.please.net> wrote=

[#381970] Re: Hash Surprises with Fixnum, #hash, and #eql? — Clifford Heath <no@...> 2011/04/21

Charles,

[#381090] can we use direct ruby instaed of javascript ? — Sniper Abandon <sathish.salem.1984@...>

Hi Ninjas,

29 messages 2011/04/07
[#381113] Re: can we use direct ruby instaed of javascript ? — Peter Zotov <whitequark@...> 2011/04/07

On Thu, 7 Apr 2011 15:44:50 +0900, Sniper Abandon wrote:

[#381136] Re: can we use direct ruby instaed of javascript ? — Chad Perrin <code@...> 2011/04/07

On Thu, Apr 07, 2011 at 09:50:14PM +0900, Peter Zotov wrote:

[#381147] Re: can we use direct ruby instaed of javascript ? — Peter Zotov <whitequark@...> 2011/04/07

On Fri, 8 Apr 2011 01:48:58 +0900, Chad Perrin wrote:

[#381160] Re: can we use direct ruby instaed of javascript ? — Chad Perrin <code@...> 2011/04/08

On Fri, Apr 08, 2011 at 05:37:49AM +0900, Peter Zotov wrote:

[#381167] Re: can we use direct ruby instaed of javascript ? — Julian Leviston <julian@...> 2011/04/08

I think it might be actually quite interesting for the original poster =

[#381195] Re: can we use direct ruby instaed of javascript ? — Josh Cheek <josh.cheek@...> 2011/04/08

On Thu, Apr 7, 2011 at 11:46 PM, Julian Leviston <julian@coretech.net.au>wrote:

[#381125] String.gsub with regex and block — Alexey Petrushin <axyd80@...>

Probably a stupid question, but is there a way to use :gsub replacement

12 messages 2011/04/07

[#381210] Calling to_enum on a MatchData object — Vahagn Hayrapetyan <vahagnh@...>

Hi, I have the following snippet of code:

15 messages 2011/04/08

[#381281] Copying parameters to singleton class — Lars Olsson <lasso@...>

Hi list!

23 messages 2011/04/11

[#381306] Creating a full application with Ruby — Fily Salas <fs_tigre@...>

Hi,

22 messages 2011/04/11

[#381355] Ruby for beginners (was: Re: Hello) — Phillip Gawlowski <cmdjackryan@...>

On Tue, Apr 12, 2011 at 5:08 PM, Vincent Manis <vmanis@telus.net> wrote:

37 messages 2011/04/12
[#381365] Re: Ruby for beginners (was: Re: Hello) — andrew mcelroy <sophrinix@...> 2011/04/12

On Tue, Apr 12, 2011 at 10:30 AM, Phillip Gawlowski <

[#381373] Re: Ruby for beginners (was: Re: Hello) — Phillip Gawlowski <cmdjackryan@...> 2011/04/12

On Tue, Apr 12, 2011 at 7:48 PM, andrew mcelroy <sophrinix@gmail.com> wrote:

[#381388] Re: Ruby for beginners (was: Re: Hello) — Vincent Manis <vmanis@...> 2011/04/13

OK, so here's another kick at the can.=20

[#381420] Re: Ruby for beginners (was: Re: Hello) — Josh Cheek <josh.cheek@...> 2011/04/13

On Tue, Apr 12, 2011 at 8:30 PM, Vincent Manis <vmanis@telus.net> wrote:

[#381430] Re: Ruby for beginners (was: Re: Hello) — Vincent Manis <vmanis@...> 2011/04/13

On 2011-04-13, at 05:59, Josh Cheek wrote:

[#381434] Re: Ruby for beginners (was: Re: Hello) — Phillip Gawlowski <cmdjackryan@...> 2011/04/13

On Wed, Apr 13, 2011 at 4:48 PM, Vincent Manis <vmanis@telus.net> wrote:

[#381487] Re: Ruby for beginners (was: Re: Hello) — Vincent Manis <vmanis@...> 2011/04/14

On 2011-04-13, at 08:03, Phillip Gawlowski wrote:

[#381495] Re: Ruby for beginners (was: Re: Hello) — Chad Perrin <code@...> 2011/04/14

On Thu, Apr 14, 2011 at 10:35:42AM +0900, Vincent Manis wrote:

[#381530] Re: Ruby for beginners (was: Re: Hello) — Phillip Gawlowski <cmdjackryan@...> 2011/04/14

On Thu, Apr 14, 2011 at 5:03 AM, Chad Perrin <code@apotheon.net> wrote:

[#381423] so, who's writing a dedicated ruby ide? — Martin DeMello <martindemello@...>

The recent thread on newbie-friendliness and a "ruby in a box" IDE

11 messages 2011/04/13

[#381444] Tk : non blocking Tk.mainloop — Juju SL <jujusl@...>

Hi all,

21 messages 2011/04/13

[#381547] Running Ruby script in emacs — duke <sidney.reilley.ii@...>

Hey ...

14 messages 2011/04/14

[#381548] To Yield or Not to Yield: An Inferable Question — Michael Edgar <adgar@...>

Hi Rubyists,

14 messages 2011/04/14

[#381562] What do you do when you need to attach data to an object instance? — "Aaron D. Gifford" <astounding@...>

What do you do when you see a need to be able to attach some data to

17 messages 2011/04/14
[#381566] Re: What do you do when you need to attach data to an object instance? — Kevin Mahler <kevin.mahler@...> 2011/04/14

Aaron D. Gifford wrote in post #992841:

[#381573] Re: What do you do when you need to attach data to an object instance? — "Aaron D. Gifford" <astounding@...> 2011/04/14

On Thu, Apr 14, 2011 at 3:11 PM, Kevin Mahler <kevin.mahler@yahoo.com> wrot=

[#381582] Re: What do you do when you need to attach data to an object instance? — "Aaron D. Gifford" <astounding@...> 2011/04/14

> On Thu, Apr 14, 2011 at 3:11 PM, Kevin Mahler <kevin.mahler@yahoo.com> wrote:

[#381596] Re: What do you do when you need to attach data to an object instance? — Kevin Mahler <kevin.mahler@...> 2011/04/15

Aaron D. Gifford wrote in post #992887:

[#381567] Re: Chad Perrin — Everett L Williams II <rett@...>

*Hasn't anybody in the management of this forum the guts to either quiet

16 messages 2011/04/14

[#381605] looking for an "inversion" pattern — Fearless Fool <r@...>

I'm sure there's a clean way to do this in Ruby, but I haven't figured

13 messages 2011/04/15

[#381622] Get the real object in a Hash key — Iñaki Baz Castillo <ibc@...>

Hi, let's suppose this simple code in which I add internal attributes

14 messages 2011/04/15
[#381623] Re: Get the real object in a Hash key — Robert Klemme <shortcutter@...> 2011/04/15

On Fri, Apr 15, 2011 at 2:50 PM, I=F1aki Baz Castillo <ibc@aliax.net> wrote=

[#381626] Re: Get the real object in a Hash key — Iñaki Baz Castillo <ibc@...> 2011/04/15

2011/4/15 Robert Klemme <shortcutter@googlemail.com>:

[#381644] Extract a range i.e. svr[100..130] ? — Richard Sandoval <skolopen@...>

What best method could extract the range of a given list of servers?

13 messages 2011/04/15

[#381742] Telnet "More?" — "Eric T." <erictetz@...>

I'm trying to use the telnet library. I don't know Ruby AT ALL

15 messages 2011/04/17

[#381768] Tail Call Optimization (Tail Recursion) — Terry Michaels <cmhoward@...>

I did some googling to find out if Ruby supports tail call optimization,

18 messages 2011/04/18

[#381781] Need for speed -> a C extension? — Martin Hansen <mail@...>

Hello all,

28 messages 2011/04/18
[#381788] Re: Need for speed -> a C extension? — "WJ" <w_a_x_man@...> 2011/04/18

Martin Hansen wrote:

[#381792] Re: Need for speed -> a C extension? — Martin Hansen <mail@...> 2011/04/18

WJ wrote in post #993576:

[#381794] Re: Need for speed -> a C extension? — Ryan Davis <ryand-ruby@...> 2011/04/18

[#381836] Re: Need for speed -> a C extension? — Martin Hansen <mail@...> 2011/04/19

>> def match?(char1, char2)

[#381849] Re: Need for speed -> a C extension? — brabuhr@... 2011/04/19

On Tue, Apr 19, 2011 at 6:30 AM, Martin Hansen <mail@maasha.dk> wrote:

[#381853] Re: Need for speed -> a C extension? — Martin Hansen <mail@...> 2011/04/19

unknown wrote in post #993757:

[#381822] anonymous closures with Proc,new, lambda and -> — Stu <stu@...>

I am new to the study of functional paradigm. If this question is academic

32 messages 2011/04/19
[#381829] Re: anonymous closures with Proc,new, lambda and -> — Brian Candler <b.candler@...> 2011/04/19

Stu wrote in post #993687:

[#381830] Re: anonymous closures with Proc,new, lambda and -> — Brian Candler <b.candler@...> 2011/04/19

Brian Candler wrote in post #993704:

[#381875] Re: anonymous closures with Proc,new, lambda and -> — Stu <stu@...> 2011/04/19

how would i break it down to two functions?

[#381884] Re: anonymous closures with Proc,new, lambda and -> — 7stud -- <bbxx789_05ss@...> 2011/04/20

Stu wrote in post #993854:

[#381890] Re: anonymous closures with Proc,new, lambda and -> — Stu <stu@...> 2011/04/20

Lots of helpful information in this thread. Thank you all for helping me.

[#381942] Re: anonymous closures with Proc,new, lambda and -> — 7stud -- <bbxx789_05ss@...> 2011/04/20

Stu wrote in post #993922:

[#381946] Re: anonymous closures with Proc,new, lambda and -> — Steve Klabnik <steve@...> 2011/04/20

Naw, monads are actually really, really easy. They're just poorly

[#381952] Re: anonymous closures with Proc,new, lambda and -> — Brian Candler <b.candler@...> 2011/04/20

Steve Klabnik wrote in post #994098:

[#381958] On the Capitalization of Project Files — Intransition <transfire@...>

I have noticed a trend with regards to the case of project files. In

10 messages 2011/04/20

[#382043] Reversing a string without using array, classes and reverse function — Rubist Rohit <passionate_programmer@...>

I am trying this:

20 messages 2011/04/22

[#382092] How to split dot “.” only before equal “=” — Sira PS <ploy.sukachai@...>

I need to split dot only before equal to assign to hash

10 messages 2011/04/23

[#382156] Replace any multiple whitespaces with single white space — Michelle Pace <michelle@...>

Hello, I need to make the first string below into the second string.

10 messages 2011/04/25

[#382264] File position and buffers — Cee Joe <cyril_jose@...>

Hi all,

22 messages 2011/04/27

[#382292] Is everything object ? — "amir e." <aef1370@...>

Hi

35 messages 2011/04/28
[#382296] Re: Is everything object ? — Josh Cheek <josh.cheek@...> 2011/04/28

On Thu, Apr 28, 2011 at 4:48 AM, amir e. <aef1370@gmail.com> wrote:

[#382306] Re: Is everything object ? — Chad Perrin <code@...> 2011/04/28

On Thu, Apr 28, 2011 at 08:52:35PM +0900, Josh Cheek wrote:

[#382318] Re: Is everything object ? — Josh Cheek <josh.cheek@...> 2011/04/28

On Thu, Apr 28, 2011 at 10:12 AM, Chad Perrin <code@apotheon.net> wrote:

[#382334] Re: Is everything object ? — Chad Perrin <code@...> 2011/04/28

On Fri, Apr 29, 2011 at 02:23:32AM +0900, Josh Cheek wrote:

[#382347] Re: Is everything object ? — Josh Cheek <josh.cheek@...> 2011/04/28

On Thu, Apr 28, 2011 at 3:22 PM, Chad Perrin <code@apotheon.net> wrote:

[#382356] Re: Is everything object ? — Chad Perrin <code@...> 2011/04/29

On Fri, Apr 29, 2011 at 08:39:14AM +0900, Josh Cheek wrote:

[#382361] Re: Is everything object ? — Josh Cheek <josh.cheek@...> 2011/04/29

On Thu, Apr 28, 2011 at 10:40 PM, Chad Perrin <code@apotheon.net> wrote:

[#382395] Re: Is everything object ? — Chad Perrin <code@...> 2011/04/29

On Fri, Apr 29, 2011 at 01:09:25PM +0900, Josh Cheek wrote:

[#382416] Re: Is everything object ? — Josh Cheek <josh.cheek@...> 2011/04/29

On Fri, Apr 29, 2011 at 2:37 PM, Chad Perrin <code@apotheon.net> wrote:

[#382429] Re: Is everything object ? — Chad Perrin <code@...> 2011/04/30

On Sat, Apr 30, 2011 at 08:01:48AM +0900, Josh Cheek wrote:

[#382310] Initialize Struct from Hash — Brian Candler <b.candler@...>

I just want to check I've not missed something here. Is there a built-in

10 messages 2011/04/28

[#382312] calling methods, beginner help — Ronnie Aa <liquid98@...>

Hello Guys,

13 messages 2011/04/28

[#382350] Ruby Beginner Need Help.. — Didin Ibnu Sarnan <didinna@...>

Hi,

18 messages 2011/04/29
[#382352] Re: Ruby Beginner Need Help.. — 7stud -- <bbxx789_05ss@...> 2011/04/29

Didin Ibnu Sarnan wrote in post #995669:

[#382354] Re: Ruby Beginner Need Help.. — Didin Ibnu Sarnan <didinna@...> 2011/04/29

Hi,

[#382401] How do I read HTTP POST XML sent to CGI? — Ting Chang <aumart@...>

Hello Ruby Masters,

14 messages 2011/04/29

[#382452] Why defining a constant in a method is not allowed but using self.class.const_set is allowed? — Iñaki Baz Castillo <ibc@...>

Hi, assinging a value to a constant within a method is not allowed

14 messages 2011/04/30
[#382454] Re: Why defining a constant in a method is not allowed but using self.class.const_set is allowed? — Robert Klemme <shortcutter@...> 2011/04/30

On 30.04.2011 21:25, I=F1aki Baz Castillo wrote:

[#382456] Re: Why defining a constant in a method is not allowed but using self.class.const_set is allowed? — Iñaki Baz Castillo <ibc@...> 2011/04/30

2011/4/30 Robert Klemme <shortcutter@googlemail.com>:

[#382465] Re: Why defining a constant in a method is not allowed but using self.class.const_set is allowed? — Christopher Dicely <cmdicely@...> 2011/04/30

On Sat, Apr 30, 2011 at 12:58 PM, I=C3=B1aki Baz Castillo <ibc@aliax.net> w=

[#382466] Re: Why defining a constant in a method is not allowed but using self.class.const_set is allowed? — Iñaki Baz Castillo <ibc@...> 2011/04/30

2011/5/1 Christopher Dicely <cmdicely@gmail.com>:

Need for speed -> a C extension?

From: Martin Hansen <mail@...>
Date: 2011-04-18 15:15:53 UTC
List: ruby-talk #381781
Hello all,


The below code is too slow for practical use. I need it to run at least
20 times faster. Perhaps that is possible with some C code? I have no
experience with writing Ruby extensions. What are the pitfalls? Which
part of the code should be ported? Any pointers to get me started?

Cheers,


Martin


#!/usr/bin/env ruby

# IUPAC nucleotide pair ambiguity equivalents are saved in an
# array of bit fields.

BIT_A = 1 << 0
BIT_T = 1 << 1
BIT_C = 1 << 2
BIT_G = 1 << 3

EQUAL          = Array.new(256, 0)
EQUAL['A'.ord] = BIT_A
EQUAL['T'.ord] = BIT_T
EQUAL['U'.ord] = BIT_T
EQUAL['C'.ord] = BIT_C
EQUAL['G'.ord] = BIT_G
EQUAL['M'.ord] = (BIT_A|BIT_C)
EQUAL['R'.ord] = (BIT_A|BIT_G)
EQUAL['W'.ord] = (BIT_A|BIT_T)
EQUAL['S'.ord] = (BIT_C|BIT_G)
EQUAL['Y'.ord] = (BIT_C|BIT_T)
EQUAL['K'.ord] = (BIT_G|BIT_T)
EQUAL['B'.ord] = (BIT_C|BIT_G|BIT_T)
EQUAL['D'.ord] = (BIT_A|BIT_G|BIT_T)
EQUAL['H'.ord] = (BIT_A|BIT_C|BIT_T)
EQUAL['V'.ord] = (BIT_A|BIT_C|BIT_G)
EQUAL['N'.ord] = (BIT_A|BIT_C|BIT_G|BIT_T)

# Module containing code to locate nucleotide patterns in sequences
allowing for
# ambiguity codes and a given maximum edit distance.
# Insertions are nucleotides found in the pattern but not in the
sequence.
# Deletions are nucleotides found in the sequence but not in the
pattern.
#
# Inspired by the paper by Bruno Woltzenlogel Paleo (page 197):
# http://www.logic.at/people/bruno/Papers/2007-GATE-ESSLLI.pdf
module PatternMatcher
  #
------------------------------------------------------------------------------
  #   str.match(pattern[, pos[, max_edit_distance]])
  #   -> Match or nil
  #
  #
------------------------------------------------------------------------------
  # Method to locate the next pattern match starting from a given
position. A match
  # is allowed to contain a given maximum edit distance. If a match is
located a
  # Match object will be returned otherwise nil.
  def match(pattern, pos = 0, max_edit_distance = 0)
    @pattern           = pattern
    @pos               = pos
    @max_edit_distance = max_edit_distance
    @vector            = vector_init

    while @pos < @seq.length
      vector_update

      return match_new if match_found?

      @pos += 1
    end
  end

  #
------------------------------------------------------------------------------
  #   str.scan(pattern[, pos[, max_edit_distance]])
  #   -> Array
  #   str.scan(pattern[, pos[, max_edit_distance]]) { |match|
  #     block
  #   }
  #   -> Match
  #
  #
------------------------------------------------------------------------------
  # Method to iterate through a sequence to locate pattern matches
starting
  # from a given position and allowing for a maximum edit distance.
  # Matches found in block context return the Match object. Otherwise
matches are
  # returned in an Array.
  def scan(pattern, pos = 0, max_edit_distance = 0)
    matches = []

    while match = match(pattern, pos, max_edit_distance)
      if block_given?
        yield match
      else
        matches << match
      end

      pos = match.pos + 1
    end

    return matches unless block_given?
  end

  private

  # Method to initailize the score vector and return this.
  def vector_init
    vector = []

    (0 ... @pattern.length + 1).each do |i|
      vector[i] = Score.new(matches = 0, mismatches = 0, insertions = i)
    end

    vector
  end

  # Method to update the score vector.
  def vector_update
    new_vector = @vector.dup

    (0 ... @pattern.length).each do |i|
      if match?(@seq[@pos], @pattern[i])
        new_vector[i + 1] = @vector[i].dup
        new_vector[i + 1].matches += 1
      else
        mismatch  = @vector[i].dup
        insertion = new_vector[i].dup
        deletion  = @vector[i + 1].dup

        if deletion?(mismatch, insertion, deletion)
          deletion.deletions += 1
          new_vector[i + 1] = deletion
        elsif mismatch?(mismatch, insertion, deletion)
          mismatch.mismatches += 1
          new_vector[i + 1] = mismatch
        elsif insertion?(mismatch, insertion, deletion)
          insertion.insertions += 1
          new_vector[i + 1] = insertion
        end
      end
    end

    @vector = new_vector
  end

  # Method to determine if a match occurred.
  def match?(char1, char2)
    (EQUAL[char1.upcase.ord] & EQUAL[char2.upcase.ord]) != 0
  end

  # Method to determine if a mismatch occured.
  def mismatch?(mismatch, insertion, deletion)
    if mismatch.edit_distance <= insertion.edit_distance and
       mismatch.edit_distance <= deletion.edit_distance
      true
    end
  end

  # Method to determine if an insertion occured.
  def insertion?(mismatch, insertion, deletion)
    if insertion.edit_distance <= mismatch.edit_distance and
       insertion.edit_distance <= deletion.edit_distance
      true
    end
  end

  # Method to determine if a deletion occured.
  def deletion?(mismatch, insertion, deletion)
    if deletion.edit_distance <= mismatch.edit_distance and
       deletion.edit_distance <= insertion.edit_distance
      true
    end
  end

  # Method to print the score vector.
  def vector_print
    @vector.each do |s|
      puts s
    end

    puts
  end

  # Method that returns a Match object initialized with
  # information from the score vector.
  def match_new
    matches    = @vector.last.matches
    mismatches = @vector.last.mismatches
    insertions = @vector.last.insertions
    deletions  = @vector.last.deletions
    length     = @pattern.length - insertions + deletions
    pos        = @pos - length + 1
    match      = @seq[pos ... pos + length]

    Match.new(pos, match, matches, mismatches, insertions, deletions,
length)
  end

  # Method that determines if a match was found by analyzing the score
vector.
  def match_found?
    if @vector.last.edit_distance <= @max_edit_distance
      true
    end
  end

  # Class to instantiate Score objects that holds score information.
  class Score
    attr_accessor :matches, :mismatches, :insertions, :deletions

    def initialize(matches = 0, mismatches = 0, insertions = 0,
deletions = 0)
      @matches    = matches
      @mismatches = mismatches
      @insertions = insertions
      @deletions  = deletions
    end

    # Method to calculate and return the edit distance.
    def edit_distance
      self.mismatches + self.insertions + self.deletions
    end

    private

    def to_s
      "(#{[self.matches, self.mismatches, self.insertions,
self.deletions].join(',')})"
    end
  end

  # Class for creating Match objects which contain the description of a
  # match between a nucleotide sequence and a pattern.
  class Match
    attr_reader :pos, :match, :matches, :mismatches, :insertions,
:deletions, :edit_distance, :length

    def initialize(pos, match, matches, mismatches, insertions,
deletions, length)
      @pos           = pos
      @match         = match
      @matches       = matches
      @mismatches    = mismatches
      @insertions    = insertions
      @deletions     = deletions
      @edit_distance = mismatches + insertions + deletions
      @length        = length
    end
  end
end

-- 
Posted via http://www.ruby-forum.com/.

In This Thread

Prev Next