bio-vcf 0.8.2 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +8 -2
  3. data/Gemfile +4 -6
  4. data/README.md +92 -57
  5. data/Rakefile +3 -41
  6. data/TAGS +115 -0
  7. data/VERSION +1 -1
  8. data/bin/bio-vcf +58 -70
  9. data/bio-vcf.gemspec +23 -75
  10. data/features/cli.feature +6 -1
  11. data/features/multisample.feature +12 -0
  12. data/features/step_definitions/cli-feature.rb +2 -2
  13. data/features/step_definitions/multisample.rb +19 -0
  14. data/features/step_definitions/vcf_header.rb +1 -1
  15. data/features/support/env.rb +0 -9
  16. data/lib/bio-vcf/pcows.rb +210 -0
  17. data/lib/bio-vcf/vcfheader.rb +28 -9
  18. data/lib/bio-vcf/vcfheader_line.rb +455 -160
  19. data/lib/bio-vcf/vcfrecord.rb +30 -15
  20. data/ragel/gen_vcfheaderline_parser.rl +68 -25
  21. data/ragel/generate.sh +4 -1
  22. data/template/vcf2json.erb +16 -16
  23. data/template/vcf2json_full_header.erb +16 -17
  24. data/template/vcf2json_use_meta.erb +35 -35
  25. data/test/data/input/gatk_exome.vcf +237 -0
  26. data/test/data/input/gatk_wgs.vcf +1000 -0
  27. data/test/data/input/test.bed +632 -0
  28. data/test/data/regression/eval_once-stderr.new +1 -0
  29. data/test/data/regression/eval_once.new +1 -0
  30. data/test/data/regression/eval_once.ref +1 -0
  31. data/test/data/regression/eval_r.info.dp-stderr.new +4 -0
  32. data/test/data/regression/eval_r.info.dp.new +150 -0
  33. data/test/data/regression/ifilter_s.dp-stderr.new +28 -0
  34. data/test/data/regression/ifilter_s.dp.new +31 -0
  35. data/test/data/regression/r.info.dp-stderr.new +4 -0
  36. data/test/data/regression/r.info.dp.new +147 -0
  37. data/test/data/regression/rewrite.info.sample-stderr.new +4 -0
  38. data/test/data/regression/rewrite.info.sample.new +150 -0
  39. data/test/data/regression/s.dp-stderr.new +12 -0
  40. data/test/data/regression/s.dp.new +145 -0
  41. data/test/data/regression/seval_s.dp-stderr.new +4 -0
  42. data/test/data/regression/seval_s.dp.new +36 -0
  43. data/test/data/regression/sfilter_seval_s.dp-stderr.new +12 -0
  44. data/test/data/regression/sfilter_seval_s.dp.new +31 -0
  45. data/test/data/regression/thread4-stderr.new +4 -0
  46. data/test/data/regression/thread4.new +150 -0
  47. data/test/data/regression/thread4_4-stderr.new +15 -0
  48. data/test/data/regression/thread4_4.new +150 -0
  49. data/test/data/regression/thread4_4_failed_filter-stderr.new +5 -0
  50. data/test/data/regression/thread4_4_failed_filter-stderr.ref +5 -2
  51. data/test/data/regression/thread4_4_failed_filter.new +110 -0
  52. data/test/data/regression/vcf2json_full_header-stderr.new +4 -0
  53. data/test/data/regression/vcf2json_full_header.new +225 -0
  54. data/test/data/regression/vcf2json_full_header.ref +222 -258
  55. data/test/data/regression/vcf2json_use_meta-stderr.new +4 -0
  56. data/test/data/regression/vcf2json_use_meta.new +4697 -0
  57. data/test/data/regression/vcf2json_use_meta.ref +4697 -0
  58. data/test/performance/metrics.md +18 -1
  59. data/test/tmp/test.vcf +12469 -0
  60. metadata +38 -62
  61. data/Gemfile.lock +0 -81
  62. data/ragel/gen_vcfheaderline_parser.rb +0 -483
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 515319faec0710075f13a0265a4027130ec5f10a
4
- data.tar.gz: aed2ff09861568291363ca21944567ad36987813
3
+ metadata.gz: 1364a1b5bd401632c6c2ae2497a358c206d7a9e6
4
+ data.tar.gz: 2a8cad615012dcd175cc3bb614888b33db16483b
5
5
  SHA512:
6
- metadata.gz: 94ff3bfda4357fc187a89c9a55116ceefe15fc2b8fa28af45e92afcad452c8d2bd65e5eae17dd2c40b046f89288c640ba5d4b40b8efb711781caed766e48f518
7
- data.tar.gz: 3d810db35d1ad862aad6f4ec81d695c6d7d74d46336d4e5563e925da267d04521387994d794ff7d8384cf10d8c94701e0e2af9380ddc0b4505e00edbbedb7c3e
6
+ metadata.gz: d8420c9926835ff632cd8dd93c057c08f37dc557c86d76fd1766a044dcc5a8b7c573553c2ef6efe8e348d868666c7fa6d62b34779e214b090cf3287e087e61c8
7
+ data.tar.gz: b666a3d97a63ac18ef7ff88e002b88dee8a81e703cadaacaffc968fe7f634591bcf5df40cd930b9493e293530047d8cc6a31df446ebf1e5cd7bfb2f6164e3e0a
@@ -1,8 +1,14 @@
1
+ sudo: false # required for the new containers
2
+
1
3
  language: ruby
2
4
  rvm:
3
5
  # - 1.9.3 <- No longer working
4
- - 2.0.0
5
- - 2.1.0
6
+ # - 2.0.0
7
+ # - 2.1.0
8
+ - 2.2.2
9
+
10
+ # install:
11
+ # - gem install cucumber rspec regressiontest
6
12
 
7
13
  branches:
8
14
  only:
data/Gemfile CHANGED
@@ -1,15 +1,13 @@
1
1
  source "http://rubygems.org"
2
- # Add dependencies required to use your gem here.
3
- # Example:
4
- # gem "activesupport", ">= 2.3.5"
5
2
 
6
3
  # Add dependencies to develop your gem here.
7
4
  # Include everything needed to run rake, tests, features, etc.
8
5
  group :development do
9
6
  # gem "minitest"
10
- gem "rspec", ">= 2.14.0"
11
- gem "cucumber", ">= 1.3.11"
12
- gem "jeweler", ">= 2.0.1" # , "~> 1.8.4", :git => "https://github.com/technicalpickles/jeweler.git"
7
+ gem "rake"
8
+ gem "rspec"
9
+ gem "cucumber"
13
10
  gem "regressiontest", ">= 0.0.3"
14
11
  end
15
12
 
13
+
data/README.md CHANGED
@@ -2,10 +2,19 @@
2
2
 
3
3
  [![Build Status](https://secure.travis-ci.org/pjotrp/bioruby-vcf.png)](http://travis-ci.org/pjotrp/bioruby-vcf)
4
4
 
5
- A new generation VCF parser. Bio-vcf is not only fast for genome-wide
6
- (WGS) data, it also comes with a really nice filtering, evaluation and
7
- rewrite language and it can output any type of textual data, including
8
- VCF header and contents in RDF and JSON.
5
+ ## Updates
6
+
7
+ * The outputter now writes (properly) in parallel with the parser
8
+ * bio-vcf turns any VCF into JSON with header information, and
9
+ allows you to pipe that JSON directly into any JSON supporting
10
+ language, including Python and Javascript!
11
+
12
+ ## Bio-vcf
13
+
14
+ Bio-vcf is a new generation VCF parser, filter and converter. Bio-vcf is not only
15
+ very fast for genome-wide (WGS) data, it also comes with a really nice
16
+ filtering, evaluation and rewrite language and it can output any type
17
+ of textual data, including VCF header and contents in RDF and JSON.
9
18
 
10
19
  So, why would you use bio-vcf over other parsers? Because
11
20
 
@@ -14,36 +23,47 @@ So, why would you use bio-vcf over other parsers? Because
14
23
  3. Bio-vcf has great multi-sample support
15
24
  4. Bio-vcf has multiple global filters and sample filters
16
25
  5. Bio-vcf can access any VCF format
17
- 6. Bio-vcf can do calculations on fields
18
- 7. Bio-vcf allows for genotype processing
19
- 8. Bio-vcf has support for set analysis
20
- 9. Bio-vcf has sane error handling
21
- 10. Bio-vcf can convert *any* VCF to *any* output, including tabular data, HTML, LaTeX, RDF, JSON and JSON-LD and even other VCFs by using (erb) templates
26
+ 6. Bio-vcf can parse and query the VCF header (META)
27
+ 7. Bio-vcf can do calculations on fields
28
+ 8. Bio-vcf allows for genotype processing
29
+ 9. Bio-vcf has support for set analysis
30
+ 10. Bio-vcf has sane error handling
31
+ 11. Bio-vcf can convert *any* VCF to *any* output, including tabular data, BED, HTML, LaTeX, RDF, JSON and JSON-LD and even other VCFs by using (erb) templates
22
32
 
23
33
  Bio-vcf has better performance than other tools
24
34
  because of lazy parsing, multi-threading, and useful combinations of
25
- (fancy) command line filtering. For example on an 2 core machine
26
- bio-vcf is typically 50% faster than JVM based SnpSift. Adding
35
+ (fancy) command line filtering (who says Ruby is slow?). Adding
27
36
  cores, bio-vcf just does better. The more complicated the filters,
28
- the larger the gain.
37
+ the larger the gain. First the base line test to show IO performance
38
+
39
+ ```sh
40
+ time cat ESP6500SI-V2-SSA137.GRCh38-liftover.*.vcf|wc
41
+ 1987143 15897724 1003214613
42
+ real 0m7.823s
43
+ user 0m7.002s
44
+ sys 0m2.972s
45
+ ```
46
+
47
+ Next run the 1Gb data with bio-vcf effectively using 5 cores on AMD Opteron(tm) Processor 6174 using Linux
29
48
 
30
49
  ```sh
31
- time ./bin/bio-vcf -iv --num-threads 8 --filter 'r.info.cp>0.3' < ESP6500SI_V2_SSA137.vcf > test1.vcf
32
- real 0m21.095s
33
- user 1m41.101s
34
- sys 0m7.852s
50
+ time cat ESP6500SI-V2-SSA137.GRCh38-liftover.*.vcf|./bin/bio-vcf -iv --num-threads 8 --filter 'r.info.cp.to_f>0.3' > /dev/null
51
+ real 0m32.491s
52
+ user 2m34.767s
53
+ sys 0m12.733s
35
54
  ```
36
55
 
37
- while parsing with SnpSift takes
56
+ The same with SnpSift v4.0 takes
38
57
 
39
58
  ```sh
40
- time cat ESP6500SI_V2_SSA137.vcf |java -jar snpEff/SnpSift.jar filter "( CP>0.3 )" > test.vcf
41
- real 1m4.913s
42
- user 0m58.071s
43
- sys 0m7.982s
59
+ time cat ESP6500SI-V2-SSA137.GRCh38-liftover.*.vcf|java -jar snpEff/SnpSift.jar filter "( CP>0.3 )" > /dev/null
60
+ real 12m36.121s
61
+ user 12m53.273s
62
+ sys 0m9.913s
44
63
  ```
45
64
 
46
- Bio-vcf is perfect for parsing large data files. Parsing a 650 Mb GATK
65
+ This means that on this machine bio-vcf is 24x faster than SnpSift even for a simple filter.
66
+ In fact, bio-vcf is perfect for complex filters and parsing large data files on powerful machines. Parsing a 650 Mb GATK
47
67
  Illumina Hiseq VCF file and evaluating the results into a BED format on
48
68
  a 16 core machine takes
49
69
 
@@ -72,11 +92,17 @@ assumptions are made about the actual contents of the VCF file (field
72
92
  names are resolved on the fly), so bio-vcf should work with
73
93
  all VCF files.
74
94
 
75
- To fetch all entries where all samples have depth larger than 20 use
76
- a sample filter
95
+ To fetch all entries where all samples have depth larger than 20 and
96
+ filter set to PASS use a sample filter
77
97
 
78
98
  ```ruby
79
- bio-vcf --sfilter 'sample.dp>20' < file.vcf
99
+ bio-vcf --sfilter 'sample.dp>20 and rec.filter=="PASS"' < file.vcf
100
+ ```
101
+
102
+ or with a regex
103
+
104
+ ```ruby
105
+ bio-vcf --sfilter 'sample.dp>20 and rec.filter !~ /LowQD/' < file.vcf
80
106
  ```
81
107
 
82
108
  To only filter on some samples number 0 and 3:
@@ -265,6 +291,12 @@ Get the sample names
265
291
  NORMAL,TUMOR
266
292
  ```
267
293
 
294
+ Get information from the header (META)
295
+
296
+ ```ruby
297
+ bio-vcf -q --skip-header --eval-once 'header.meta["GATKCommandLine"]' < gatk_exome.vcf
298
+ ```
299
+
268
300
  The 'fields' array contains unprocessed data (strings). Print first
269
301
  five raw fields
270
302
 
@@ -304,7 +336,10 @@ Info fields are referenced by
304
336
  bio-vcf --filter 'rec.info.dp>100 and rec.info.readposranksum<=0.815' < file.vcf
305
337
  ```
306
338
 
307
- With subfields defined by rec.format
339
+ (alternatively you can use the indexed rec.info['DP'] and list INFO fields with
340
+ rec.info.fields).
341
+
342
+ Subfields defined by rec.format:
308
343
 
309
344
  ```ruby
310
345
  bio-vcf --filter 'rec.tumor.ss != 2' < file.vcf
@@ -695,7 +730,7 @@ template could be
695
730
  "seq:ref": "<%= rec.ref %>" ,
696
731
  "seq:alt": "<%= rec.alt[0] %>" ,
697
732
  "seq:maf": <%= rec.info.maf[0] %> ,
698
- "dp": <%= rec.info.dp %> ,
733
+ "dp": <%= rec.info.dp %>
699
734
  };
700
735
  ```
701
736
 
@@ -715,7 +750,7 @@ which renders
715
750
  "seq:ref": "C" ,
716
751
  "seq:alt": "T" ,
717
752
  "seq:maf": 0.0151 ,
718
- "dp": 86 ,
753
+ "dp": 86
719
754
  };
720
755
  ```
721
756
 
@@ -767,24 +802,23 @@ can be
767
802
  ```Javascript
768
803
  =HEADER
769
804
  <% require 'json' %>
770
- [
771
- { "HEADER": {
805
+ { "HEADER": {
772
806
  "options": <%= options.to_h.to_json %>,
773
807
  "files": <%= ARGV %>,
774
808
  "version": "<%= BIOVCF_VERSION %>"
775
809
  },
776
-
810
+ "BODY":[
777
811
  =BODY
778
-
779
- {
780
- "seq:chr": "<%= rec.chrom %>" ,
781
- "seq:pos": <%= rec.pos %> ,
782
- "seq:ref": "<%= rec.ref %>" ,
783
- "seq:alt": "<%= rec.alt[0] %>" ,
784
- "dp": <%= rec.info.dp %> ,
785
- },
812
+ {
813
+ "seq:chr": "<%= rec.chrom %>" ,
814
+ "seq:pos": <%= rec.pos %> ,
815
+ "seq:ref": "<%= rec.ref %>" ,
816
+ "seq:alt": "<%= rec.alt[0] %>" ,
817
+ "dp": <%= rec.info.dp %>
818
+ },
786
819
  =FOOTER
787
- ]
820
+ ]
821
+ }
788
822
  ```
789
823
 
790
824
  with
@@ -796,27 +830,28 @@ with
796
830
  may generate something like
797
831
 
798
832
  ```Javascript
799
- [
800
- { "HEADER": {
833
+ { "HEADER": {
801
834
  "options": {"show_help":false,"source":"https://github.com/CuppenResearch/bioruby-vcf","version":"0.8.1-pre3 (Pjotr Prins)","date":"2014-11-26 12:51:36 +0000","thread_lines":40000,"template":"template/vcf2json.erb","skip_header":true},
802
835
  "files": [],
803
836
  "version": "0.8.1-pre3"
804
837
  },
805
- {
806
- "seq:chr": "1" ,
807
- "seq:pos": 883516 ,
808
- "seq:ref": "G" ,
809
- "seq:alt": "A" ,
810
- "dp": ,
811
- },
812
- {
813
- "seq:chr": "1" ,
814
- "seq:pos": 891344 ,
815
- "seq:ref": "G" ,
816
- "seq:alt": "A" ,
817
- "dp": ,
818
- },
819
- ]
838
+ "BODY":[
839
+ {
840
+ "seq:chr": "1" ,
841
+ "seq:pos": 883516 ,
842
+ "seq:ref": "G" ,
843
+ "seq:alt": "A" ,
844
+ "dp":
845
+ },
846
+ {
847
+ "seq:chr": "1" ,
848
+ "seq:pos": 891344 ,
849
+ "seq:ref": "G" ,
850
+ "seq:alt": "A" ,
851
+ "dp": ,
852
+ },
853
+ ]
854
+ }
820
855
  ```
821
856
 
822
857
  Note that the template is not smart enough to remove the final comma
data/Rakefile CHANGED
@@ -1,50 +1,12 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  require 'rubygems'
4
- require 'bundler'
5
- begin
6
- Bundler.setup(:default, :development)
7
- rescue Bundler::BundlerError => e
8
- $stderr.puts e.message
9
- $stderr.puts "Run `bundle install` to install missing gems"
10
- exit e.status_code
11
- end
12
4
  require 'rake'
13
5
 
14
- require 'jeweler'
15
- Jeweler::Tasks.new do |gem|
16
- # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
- gem.name = "bio-vcf"
18
- gem.homepage = "http://github.com/pjotrp/bioruby-vcf"
19
- gem.license = "MIT"
20
- gem.summary = %Q{Fast multi-threaded VCF parser}
21
- gem.description = %Q{Smart lazy multi-threaded parser for VCF format with useful filtering and output rewriting}
22
- gem.email = "pjotr.public01@thebird.nl"
23
- gem.authors = ["Pjotr Prins"]
24
- gem.required_ruby_version = '>=2.0.0'
25
- # dependencies defined in Gemfile
26
- end
27
- Jeweler::RubygemsDotOrgTasks.new
28
-
29
- # require 'rspec/core'
30
- # require 'rspec/core/rake_task'
31
- # RSpec::Core::RakeTask.new(:spec) do |spec|
32
- # spec.pattern = FileList['spec/**/*_spec.rb']
33
- # end
34
-
35
- # RSpec::Core::RakeTask.new(:rcov) do |spec|
36
- # spec.pattern = 'spec/**/*_spec.rb'
37
- # spec.rcov = true
38
- # end
39
-
40
- # require 'rake/testtask'
41
-
42
- # Rake::TestTask.new do |t|
43
- # t.pattern = "spec/*_spec.rb"
44
- # end
45
-
46
6
  require 'cucumber/rake/task'
47
- Cucumber::Rake::Task.new(:features)
7
+ Cucumber::Rake::Task.new(:features) do |t|
8
+ # t.cucumber_opts = "--bundler false"
9
+ end
48
10
 
49
11
  task :default => :features
50
12
 
data/TAGS ADDED
@@ -0,0 +1,115 @@
1
+
2
+ ./bin/bio-vcf,0
3
+
4
+ ./lib/bio-vcf.rb,0
5
+
6
+ ./lib/bio-vcf/vcfgenotypefield.rb,1553
7
+ module BioVcf::BioVcf1,0
8
+ class VcfNucleotides::BioVcf::VcfNucleotides7,167
9
+ def initialize::BioVcf::VcfNucleotides#BioVcf::VcfNucleotides.new8,193
10
+ def []::BioVcf::VcfNucleotides#[]13,284
11
+ def to_ary::BioVcf::VcfNucleotides#to_ary27,628
12
+ def max::BioVcf::VcfNucleotides#max32,742
13
+ def min::BioVcf::VcfNucleotides#min37,856
14
+ def sum::BioVcf::VcfNucleotides#sum42,975
15
+ class VcfAltInfo::BioVcf::VcfAltInfo50,1082
16
+ def initialize::BioVcf::VcfAltInfo#BioVcf::VcfAltInfo.new51,1103
17
+ def []::BioVcf::VcfAltInfo#[]56,1194
18
+ def to_ary::BioVcf::VcfAltInfo#to_ary70,1512
19
+ def max::BioVcf::VcfAltInfo#max75,1626
20
+ def min::BioVcf::VcfAltInfo#min79,1702
21
+ def sum::BioVcf::VcfAltInfo#sum83,1783
22
+ class VcfGenotypeField::BioVcf::VcfGenotypeField88,1850
23
+ def initialize::BioVcf::VcfGenotypeField#BioVcf::VcfGenotypeField.new89,1877
24
+ def dp4::BioVcf::VcfGenotypeField#dp496,2020
25
+ def ad::BioVcf::VcfGenotypeField#ad100,2098
26
+ def pl::BioVcf::VcfGenotypeField#pl104,2174
27
+ def bcount::BioVcf::VcfGenotypeField#bcount108,2250
28
+ def bq::BioVcf::VcfGenotypeField#bq112,2343
29
+ def amq::BioVcf::VcfGenotypeField#amq116,2424
30
+ def method_missing::BioVcf::VcfGenotypeField#method_missing120,2507
31
+ class VcfGenotypeFields::BioVcf::VcfGenotypeFields130,2709
32
+ def initialize::BioVcf::VcfGenotypeFields#BioVcf::VcfGenotypeFields.new131,2737
33
+ def []::BioVcf::VcfGenotypeFields#[]141,3021
34
+ def method_missing::BioVcf::VcfGenotypeFields#method_missing145,3136
35
+
36
+ ./lib/bio-vcf/vcfrdf.rb,156
37
+ module BioVcf::BioVcf1,0
38
+ module VcfRdf::BioVcf::VcfRdf5,93
39
+ def VcfRdf::BioVcf::VcfRdf#VcfRdf7,112
40
+ def VcfRdf::BioVcf::VcfRdf#VcfRdf18,463
41
+
42
+ ./lib/bio-vcf/vcf.rb,27
43
+ module BioVcf::BioVcf2,1
44
+
45
+ ./lib/bio-vcf/vcfline.rb,118
46
+ module BioVcf::BioVcf1,0
47
+ module VcfLine::BioVcf::VcfLine2,16
48
+ def VcfLine.parse::BioVcf::VcfLine.parse5,82
49
+
50
+ ./lib/bio-vcf/vcfrecord.rb,1831
51
+ module BioVcf::BioVcf1,0
52
+ class VcfRecordInfo::BioVcf::VcfRecordInfo3,17
53
+ def initialize::BioVcf::VcfRecordInfo#BioVcf::VcfRecordInfo.new4,41
54
+ def method_missing::BioVcf::VcfRecordInfo#method_missing9,163
55
+ module VcfRecordParser::BioVcf::VcfRecordParser18,329
56
+ def VcfRecordParser.get_format::BioVcf::VcfRecordParser.get_format20,397
57
+ def VcfRecordParser.get_info::BioVcf::VcfRecordParser.get_info25,517
58
+ module VcfRecordCall::BioVcf::VcfRecordCall30,592
59
+ def call_diff::BioVcf::VcfRecordCall#call_diff31,617
60
+ def call_nuc::BioVcf::VcfRecordCall#call_nuc35,705
61
+ def call_tumor_count::BioVcf::VcfRecordCall#call_tumor_count39,764
62
+ def call_tumor_relative_count::BioVcf::VcfRecordCall#call_tumor_relative_count43,833
63
+ def call_normal_count::BioVcf::VcfRecordCall#call_normal_count47,955
64
+ def index::BioVcf::VcfRecordCall#index51,1026
65
+ class VcfRecord::BioVcf::VcfRecord56,1125
66
+ attr_reader :header::BioVcf::VcfRecord#header60,1173
67
+ def initialize::BioVcf::VcfRecord#BioVcf::VcfRecord.new62,1198
68
+ def chrom::BioVcf::VcfRecord#chrom67,1292
69
+ def pos::BioVcf::VcfRecord#pos71,1332
70
+ def ids::BioVcf::VcfRecord#ids75,1384
71
+ def id::BioVcf::VcfRecord#id79,1443
72
+ def ref::BioVcf::VcfRecord#ref83,1476
73
+ def alt::BioVcf::VcfRecord#alt87,1524
74
+ def qual::BioVcf::VcfRecord#qual91,1582
75
+ def info::BioVcf::VcfRecord#info95,1636
76
+ def format::BioVcf::VcfRecord#format99,1711
77
+ def normal::BioVcf::VcfRecord#normal104,1848
78
+ def tumor::BioVcf::VcfRecord#tumor109,1997
79
+ def sample::BioVcf::VcfRecord#sample114,2134
80
+ def sample_by_name::BioVcf::VcfRecord#sample_by_name118,2227
81
+ def missing_samples?::BioVcf::VcfRecord#missing_samples?122,2283
82
+ def method_missing::BioVcf::VcfRecord#method_missing126,2341
83
+
84
+ ./lib/bio-vcf/variant.rb,470
85
+ module BioVcf::BioVcf1,0
86
+ module Variant::BioVcf::Variant3,17
87
+ def Variant.diff::BioVcf::Variant.diff5,37
88
+ def Variant.threshold_diff::BioVcf::Variant.threshold_diff9,132
89
+ def Variant.relative_diff::BioVcf::Variant.relative_diff14,269
90
+ def Variant.relative_threshold_diff::BioVcf::Variant.relative_threshold_diff20,497
91
+ def Variant.index::BioVcf::Variant.index25,652
92
+ def Variant.apply_threshold::BioVcf::Variant.apply_threshold31,809
93
+
94
+ ./lib/bio-vcf/vcfheader.rb,598
95
+ module BioVcf::BioVcf2,1
96
+ module VcfHeaderParser::BioVcf::VcfHeaderParser4,18
97
+ def VcfHeaderParser.get_column_names::BioVcf::VcfHeaderParser.get_column_names5,45
98
+ class VcfHeader::BioVcf::VcfHeader18,339
99
+ attr_reader :lines::BioVcf::VcfHeader#lines20,360
100
+ def initialize::BioVcf::VcfHeader#BioVcf::VcfHeader.new22,384
101
+ def add::BioVcf::VcfHeader#add26,430
102
+ def version::BioVcf::VcfHeader#version30,483
103
+ def column_names::BioVcf::VcfHeader#column_names34,578
104
+ def columns::BioVcf::VcfHeader#columns38,674
105
+ def samples::BioVcf::VcfHeader#samples42,735
106
+
107
+ ./features/step_definitions/diff_count.rb,0
108
+
109
+ ./features/step_definitions/bio-vcf_steps.rb,0
110
+
111
+ ./features/step_definitions/somaticsniper.rb,0
112
+
113
+ ./features/step_definitions/multisample.rb,0
114
+
115
+ ./features/support/env.rb,0