vcf 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. data/lib/vcf.rb +60 -0
  2. metadata +54 -0
data/lib/vcf.rb ADDED
@@ -0,0 +1,60 @@
1
+ class Vcf
2
+ public
3
+ attr_accessor :chrom, :pos, :id, :ref, :alt, :qual, :filter, :info, :format, :samples
4
+
5
+ def initialize(line=nil)
6
+ samples = {}
7
+ end
8
+
9
+ def parse_line(line, sample_names=nil)
10
+ f = line.split("\t", -1)
11
+ raise "VCF lines must have at least 8 fields" if f.size < 8
12
+ chrom = f[0]
13
+ pos = f[1].to_i
14
+ id = f[2]
15
+ ref = f[3]
16
+ alt = f[4]
17
+ qual = f[5].to_i
18
+ filter = f[6]
19
+
20
+ info = {}
21
+ info_vec = f[7].split(";")
22
+ info_vec.each do |x|
23
+ keyval = x.split("=", -1)
24
+ if keyval.size == 2 # If it's key=value
25
+ info[keyval[0]] = keyval[1]
26
+ else # Otherwise, it's just a flag
27
+ info[x] = ""
28
+ end
29
+ end
30
+
31
+ samples = {}
32
+ return true if f.size == 8 # Has just upto info
33
+ raise "Can't have format with no samples" if f.size == 9
34
+
35
+ format = f[8]
36
+
37
+ sample_keys = format.split(":")
38
+
39
+ num_samples = f.size - 9 # How many fields are past the format
40
+
41
+ if sample_names == nil # Make the sample names just ["1", "2", ... , "num_samples}"
42
+ sample_names = (1..num_samples).to_a.map{|i| i.to_s}
43
+ elsif f.size != num_samples
44
+ raise "Expected #{sample_names.size} but got #{num_samples}"
45
+ end
46
+
47
+ sample_names.each_with_index do |sample_name, sample_index|
48
+ i = sample_index + 9 # index into columns (f)
49
+ sample_values = f[i].split(":")
50
+ raise "Expected number of sample values to match number of sample keys in FORMAT column" if sample_values.size != sample_keys.size
51
+ samples[sample_name] = {}
52
+ sample_keys.each_with_index {|key, value_index| samples[sample_name][k] = sample_values[value_index]}
53
+ end
54
+
55
+ return true;
56
+ end
57
+
58
+ private
59
+ attr_accessor :
60
+ end
metadata ADDED
@@ -0,0 +1,54 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: vcf
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.1
6
+ platform: ruby
7
+ authors:
8
+ - Jesse Rodriguez
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-07-01 00:00:00 Z
14
+ dependencies: []
15
+
16
+ description: Lightweight VCF interface for ruby
17
+ email: jesserod@cs.stanford.edu
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files: []
23
+
24
+ files:
25
+ - lib/vcf.rb
26
+ homepage: http://rubygems.org/gems/vcf
27
+ licenses: []
28
+
29
+ post_install_message:
30
+ rdoc_options: []
31
+
32
+ require_paths:
33
+ - lib
34
+ required_ruby_version: !ruby/object:Gem::Requirement
35
+ none: false
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: "0"
40
+ required_rubygems_version: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: "0"
46
+ requirements: []
47
+
48
+ rubyforge_project:
49
+ rubygems_version: 1.8.5
50
+ signing_key:
51
+ specification_version: 3
52
+ summary: VCF (Variant Call Format) interface for ruby
53
+ test_files: []
54
+