Class: DustMasker

Inherits:
Object
  • Object
show all
Defined in:
lib/scbi_blast/dust_masker.rb

Overview

DustMasker launcher class

Instance Method Summary collapse

Constructor Details

#initialize(extra_params = '') ⇒ DustMasker

initializator



50
51
52
53
54
55
# File 'lib/scbi_blast/dust_masker.rb', line 50

def initialize(extra_params = '')

  @format = 'interval'
  @extra_params=extra_params

end

Instance Method Details

#closeObject



114
115
116
# File 'lib/scbi_blast/dust_masker.rb', line 114

def close

end

#do_dust(seq_fasta) ⇒ Object

do the processing with dustmasker to a set of sequences in fasta stored in a string



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
# File 'lib/scbi_blast/dust_masker.rb', line 66

def do_dust(seq_fasta)
  intervals=[]

  if !seq_fasta.nil? && !seq_fasta.empty?

    if seq_fasta.is_a?(Array)
      seq_fasta=seq_fasta.join("\n")
    end

    cmd = get_cmd(@extra_params)
    if !seq_fasta.index('>')
      raise "Data passed to dust must be in fasta format"
    end

    # puts seq_fasta
    res=''

    # Ojo, que una vez nos ibamos a volver locos buscando porque esto no devolvia todos los hits que se  encontraban al ejecutar el blast a mano, y era porque en el blast a mano le estabamos pasando la secuencia completa mientras que en el MID le estabamos pasando solo los 20 primeros nt.
    IO.popen(cmd,'w+') {|blast|
      blast.sync = true
      # blast.write(">seq\n")
      blast.write(seq_fasta)
      blast.close_write
      res = blast.readlines
      blast.close_read
    }

    if !$?.exitstatus.nil? && $?.exitstatus>0
      raise "Error while doing #{cmd} to seq: #{seq_fasta}"
    end


    res.each do |line|
      # puts "LINEA:" + line
      if line =~ /^>(.*)$/
        intervals.push DustQuery.new($1)
      elsif line =~ /^(\d+)\s\-\s(\d+)/
        # puts "Algo #{$1}, #{$2}"
        intervals.last.push [$1.to_i,$2.to_i]
      end

    end
  end

  return intervals

end

#get_cmd(extra_params = '') ⇒ Object

returns command to be executed



58
59
60
61
62
63
# File 'lib/scbi_blast/dust_masker.rb', line 58

def get_cmd(extra_params = '')

  cmd = 'dustmasker '+@extra_params + '-outfmt '+ @format + ' 2>/dev/null'
  return cmd

end