Class: Bio::Abif

Inherits:
SangerChromatogram show all
Defined in:
lib/bio/db/sanger_chromatogram/abif.rb

Overview

Description

This class inherits from the SangerChromatogram superclass. It captures the information contained within an ABIF format chromatogram file generated by DNA sequencing. See the SangerChromatogram class for usage.

Defined Under Namespace

Classes: DirectoryEntry

Constant Summary collapse

DATA_TYPES =
{ 1 => 'byte', 2 => 'char', 3 => 'word', 4 => 'short', 5 => 'long',
7 => 'float', 8 => 'double', 10 => 'date', 11 => 'time', 18 => 'pString',
19 => 'cString', 12 => 'thumb', 13 => 'bool', 6 => 'rational', 9 => 'BCD',
14 => 'point', 15 => 'rect', 16 => 'vPoint', 17 => 'vRect', 20 => 'tag',
128 => 'deltaComp', 256 => 'LZWComp', 384 => 'deltaLZW', 1024 => 'user'}
PACK_TYPES =

User defined data types have tags numbers >= 1024

{ 'byte' => 'C', 'char' => 'c', 'word' => 'n', 'short' => 'n', 'long' => 'N',
'date' => 'nCC', 'time' => 'CCCC', 'pString' => 'CA*', 'cString' => 'Z*',
'float' => 'g', 'double' => 'G',
'bool' => 'C', 'thumb' => 'NNCC', 'rational' => 'NN', 'point' => 'nn', 
'rect' => 'nnnn', 'vPoint' => 'NN', 'vRect' => 'NNNN', 'tag' => 'NN'}

Instance Attribute Summary collapse

Attributes inherited from SangerChromatogram

#atrace, #chromatogram_type, #ctrace, #dye_mobility, #gtrace, #peak_indices, #qualities, #sequence, #ttrace, #version

Instance Method Summary collapse

Methods inherited from SangerChromatogram

#complement, #complement!, open, #seq, #sequence_string, #to_biosequence

Constructor Details

#initialize(string) ⇒ Abif

see SangerChromatogram class for how to create an Abif object and its usage



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/bio/db/sanger_chromatogram/abif.rb', line 37

def initialize(string)
  header = string.slice(0,128)
  # read in header info
  @chromatogram_type, @version, @directory_tag_name, @directory_tag_number, @directory_element_type, @directory_element_size, @directory_number_of_elements, @directory_data_size, @directory_data_offset, @directory_data_handle= header.unpack("a4 n a4 N n n N N N N")
  @version = @version/100.to_f
  get_directory_entries(string)
  # get sequence
  @sequence = @directory_entries["PBAS"][1].data.map{|char| char.chr.downcase}.join("")
  #get peak indices
  @peak_indices = @directory_entries["PLOC"][1].data
  #get qualities
  @qualities = @directory_entries["PCON"][1].data
  # get sample title
  @sample_title = @directory_entries["SMPL"][1].data
  @directory_entries["PDMF"].size > 2 ? @dye_mobility = @directory_entries["PDMF"][2].data : @dye_mobility = @directory_entries["PDMF"][1].data
  #get trace data
  @chemistry = @directory_entries["phCH"][1].data
  base_order = @directory_entries["FWO_"][1].data.map{|char| char.chr.downcase}
  (9..12).each do |data_index|
    self.instance_variable_set("@#{base_order[data_index-9]}trace", @directory_entries["DATA"][data_index].data)
  end

end

Instance Attribute Details

#chemistryObject

The chemistry used when sequencing e.g Dye terminators => ‘term.’ (String)



34
35
36
# File 'lib/bio/db/sanger_chromatogram/abif.rb', line 34

def chemistry
  @chemistry
end

#sample_titleObject

The sample title as entered when sequencing the sample (String)



32
33
34
# File 'lib/bio/db/sanger_chromatogram/abif.rb', line 32

def sample_title
  @sample_title
end

Instance Method Details

#data(name, tag_number = 1) ⇒ Object

Returns the data for the name. If not found, returns nil.


Arguments:

  • (required) name: (String) name of the data

  • (required) tag_number: (Integer) tag number (default 1)

Returns

any data type or nil



68
69
70
71
# File 'lib/bio/db/sanger_chromatogram/abif.rb', line 68

def data(name, tag_number = 1)
  d = @directory_entries[name]
  d ? d[tag_number].data : nil
end