{"action":"created","comment":{"url":"https://api.github.com/repos/genome/genome/pulls/comments/28826373","id":28826373,"diff_hunk":"@@ -0,0 +1,375 @@\n+package Genome::Model::Tools::Vcf::EvaluateVcfs;\n+\n+use strict;\n+use warnings;\n+\n+use Cwd;\n+use Path::Class;\n+\n+class Genome::Model::Tools::Vcf::EvaluateVcfs {\n+    is => \"Command::V2\",\n+    has_input => [\n+        bedtools_version => {\n+            is => \"Text\",\n+            doc => \"Bedtools version to use\",\n+            default_value => \"2.17.0\",\n+        },\n+\n+        joinx_version => {\n+            is => \"Text\",\n+            doc => \"Joinx version to use\",\n+            default_value => \"1.11\",\n+        },\n+\n+        vcflib_version => {\n+            is => \"Text\",\n+            doc => \"vcflib toolset version to use\",\n+            default_value => \"1.0\",\n+        },\n+\n+        config_file => {\n+            is => 'Text',\n+            doc => 'config file input',\n+        },\n+\n+        output_directory => {\n+            is => \"Text\",\n+            doc => \"Output directory to write to\",\n+            is_output => 1,\n+        },\n+\n+        gold_snv_vcf => {\n+            is => \"Text\",\n+            doc => \"VCF file containing gold standard variant sites \"\n+                   . \"to be used to measure the evaluation VCF (for snvs)\"\n+        },\n+\n+        gold_indel_vcf => {\n+            is => \"Text\",\n+            doc => \"VCF file containing gold standard variant sites \"\n+                   . \"to be used to measure the evaluation VCF (for indels)\"\n+        },\n+\n+        gold_sample => {\n+            is => \"Text\",\n+            doc => \"Sample name in gold standard vcf file\",\n+            default => undef,\n+        },\n+\n+        roi => {\n+            is => \"Text\",\n+            doc => \"BED file of the target regions to restrict the analysis to\",\n+        },\n+\n+        true_negative_bed => {\n+            is => \"Text\",\n+            doc => \"BED file containing regions where no \"\n+                   . \"variant call should be made\",\n+        },\n+\n+        true_negative_size => {\n+            is => \"Integer\",\n+            doc => \"Use this number as the size of the TN BED \"\n+                   . \"file rather than calculating on the fly\",\n+            is_optional => '1',\n+        },\n+\n+        pass_filter_expression => {\n+            is => \"Text\",\n+            doc => \"String to pass to vcflib vcffilter in order to \"\n+                   . \"select variants from the evaluation VCF\",\n+            default_value => q{-g 'FT = PASS | FT = .'},\n+        },\n+    ],\n+\n+    has_output => [\n+        rawdata => {\n+            is => \"HASH\",\n+            doc => \"The organized stats & metadata generated during \"\n+                   . \"primary execution\",\n+        },\n+    ],\n+};\n+\n+sub execute {\n+    my $self = shift;\n+    my $configs = $self->parse_config_file();\n+    $self->collect_statistics($configs);\n+    $self->rawdata($configs);\n+    $self->display_summary_stats();\n+    return 1;\n+}\n+\n+sub display_summary_stats {\n+    my $self = shift;\n+    my $configs = $self->rawdata;\n+\n+    $self->status_message(\"Generating Summary Report\");\n+\n+    print \"\\n\";\n+    print \"==================\", \"\\n\";\n+    print \"Valdiation Summary\", \"\\n\";\n+    print \"==================\", \"\\n\";\n+    print \"\\n\";\n+\n+    my @stat_names = $self->stat_types;\n+    my @headers = ('Name', 'ID', 'VarType', @stat_names);\n+    print join(\"\\t\", @headers), \"\\n\";\n+\n+    for my $set (@{$configs}) {\n+        my ($name, $id, $type, $stats) =\n+          @{$set}{'name', 'id', 'variant_type', 'stats'};\n+        my @results = @{$stats}{@stat_names};\n+        print join(\"\\t\", $name, $id, $type, @results), \"\\n\";\n+    }\n+}\n+\n+sub collect_statistics {\n+    my ($self, $inputs) = @_;\n+\n+    my ($i, $total) = (1, scalar @{$inputs});\n+    $self->status_message(\n+        \"Performing Evaluations & Collecting Statistics (%d vcfs)\",\n+        $total\n+    );\n+\n+    for my $set (@{$inputs}) {\n+        $self->status_message(\n+            \"[ $i | $total ] Name: %s / Model ID: %s / Type: %s\",\n+            $set->{'name'}, $set->{'id'}, $set->{'variant_type'}\n+        );\n+        $self->status_message(\" ---> Vcf: %s\", $set->{'vcf'});\n+\n+        my $wkspace = $self->create_subdirectory_workspace($set);\n+        $self->status_message(\" ---> Output Workspace: %s\", $wkspace->stringify);\n+\n+        $self->status_message(\" ---> Start VCF Evaluation\");\n+        my $stats = $self->_run_evaluate_vcf($wkspace, $set);\n+        $self->status_message(\" ---> Finish VCF Evaluation\\n\\n\");\n+\n+        $set->{'stats'} = $stats;\n+        $i++;\n+    }\n+}\n+\n+sub parse_config_file {\n+    my $self = shift;\n+    my $config = $self->fetch_config_file;\n+\n+    $self->status_message(\"Parsing configuration file : $config\");\n+\n+    my $fh = $config->openr;\n+\n+    my @inputs;\n+    while (my $line = <$fh>) {\n+        chomp $line;\n+        my ($name, $id, $path, $variant_type, $sample) = split(\"\\t\", $line);\n+        $self->validate_type($variant_type);\n+        my $gold_vcf =\n+          $variant_type eq \"snvs\" ? $self->gold_snv_vcf : $self->gold_indel_vcf;\n+\n+        my $clean_indels = $variant_type eq 'indels' ? 1 : 0;\n+\n+        my $model = Genome::Model->get($id) or die $self->error_message(\n+            \"Did not find Model ID '$id' in the DB!\"\n+        );\n+\n+        my $build = $model->last_succeeded_build or die $self->error_message(\n+            \"Could not find a successful build for model ID: '$id'!\"\n+        );\n+\n+        my $reference = $build->reference_sequence_build\n+          or die $self->error_message(\n+              \"Did not find a reference for build %s\", \n+              $build->id\n+          );\n+\n+        my $i = {\n+            name => $name,\n+            id => $id,\n+            variant_type => $variant_type,\n+            vcf => Path::Class::File->new($path)->absolute,\n+            gold_vcf => Path::Class::File->new($gold_vcf)->absolute,\n+            sample => $sample,\n+            reference => $reference,\n+            clean_indels => $clean_indels,\n+        };\n+        push(@inputs, $i);\n+    }\n+\n+    return \\@inputs;\n+}\n+\n+sub _run_evaluate_vcf {\n+    my ($self, $outdir, $inputs) = @_;\n+\n+    my %params = (\n+        vcf                  => $inputs->{'vcf'}->stringify,\n+        old_sample           => $inputs->{'sample'},\n+        new_sample           => \"GOLDSTANDARD_SAMPLE\",\n+        gold_vcf             => $inputs->{'gold_vcf'}->stringify,\n+        gold_sample          => $self->gold_sample,\n+        roi                  => Cwd::abs_path($self->roi),\n+        true_negative_bed    => Cwd::abs_path($self->true_negative_bed),\n+        output_directory     => $outdir->stringify,\n+        reference            => $inputs->{'reference'},\n+        pass_only_expression => $self->pass_filter_expression,\n+        clean_indels         => $inputs->{'clean_indels'},\n+    );\n+\n+    if ($self->true_negative_size) {\n+        $params{'true_negative_size'} = $self->true_negative_size;\n+    }\n+\n+    my $cmd = Genome::Model::Tools::Vcf::EvaluateVcf->create(%params);\n+\n+    $cmd->execute or die $self->error_message(\n+        \"Trouble running Genome::Model::Tools::Vcf::EvaluateVcf!\"\n+    );\n+\n+    my $stats = $self->_collect_evaluation_stats($cmd);\n+    return $stats;\n+}\n+\n+sub _collect_evaluation_stats {\n+    my ($self, $cmd) = @_;\n+\n+    my %stats;\n+\n+    $stats{'true_positive_found_exact'} =\n+      $cmd->stat_true_positive_found_exact();\n+\n+    $stats{'total_true_positive_exact'} =\n+      $cmd->stat_total_true_positive_exact();\n+\n+    $stats{'sensitivity_exact'} = $cmd->stat_sensitivity_exact();\n+\n+    $stats{'true_positive_found_partial'} =\n+      $cmd->stat_true_positive_found_partial();\n+\n+    $stats{'total_true_positive_partial'} =\n+      $cmd->stat_total_true_positive_partial();\n+\n+    $stats{'sensitivity_partial'}    = $cmd->stat_sensitivity_partial();\n+    $stats{'false_positive_exact'}   = $cmd->stat_false_positive_exact();\n+    $stats{'false_positive_partial'} = $cmd->stat_false_positive_partial();\n+    $stats{'true_negatives'}         = $cmd->stat_true_negatives();\n+    $stats{'exact_specificity'}      = $cmd->stat_exact_specificity();\n+    $stats{'partial_specificity'}    = $cmd->stat_partial_specificity();\n+    $stats{'exact_ppv'}              = $cmd->stat_exact_ppv();\n+    $stats{'partial_ppv'}            = $cmd->stat_partial_ppv();\n+\n+    $stats{'vcf_lines_overlapping_tn'} =\n+      $cmd->stat_vcf_lines_overlapping_tn();\n+\n+    $stats{'lines_specificity_in_tn_only'} =\n+      $cmd->stat_lines_specificity_in_tn_only();\n+\n+    return \\%stats;\n+}\n+\n+sub stat_types {\n+    my $self = shift;\n+\n+    my @types = (\n+        'true_positive_found_exact', \n+        'total_true_positive_exact', \n+        'sensitivity_exact', \n+        'true_positive_found_partial', \n+        'total_true_positive_partial', \n+        'sensitivity_partial', \n+        'false_positive_exact', \n+        'false_positive_partial', \n+        'true_negatives', \n+        'exact_specificity', \n+        'partial_specificity', \n+        'exact_ppv', \n+        'partial_ppv', \n+        'vcf_lines_overlapping_tn', \n+        'lines_specificity_in_tn_only', \n+    );\n+\n+    return @types;\n+}\n+\n+sub create_subdirectory_workspace {\n+    my ($self, $inputs) = @_;\n+    my $base = $self->fetch_output_directory;\n+    my ($name, $id, $variant_type) = @{$inputs}{'name', 'id', 'variant_type'};\n+\n+    my $wkspace = join('_', $name, $id);\n+    my $subdir = $base->subdir($wkspace)->subdir($variant_type);\n+    $subdir->mkpath or die $self->error_message(\n+        \"Couldn't make workspace path '$subdir' on the file system!\"\n+    );\n+\n+    return $subdir;\n+}\n+\n+sub validate_type {\n+    my ($self, $type) = @_;\n+    if ($type ne 'snvs' && $type ne 'indels') {\n+        die $self->error_message(\n+            \"Invalid type: '$type'. Only 'snvs' and 'indels' are supported \"\n+            . \"as valid types.\"\n+        );\n+    }\n+    return 1;\n+}\n+\n+sub fetch_config_file {\n+    my $self = shift;\n+    my $config = Path::Class::File->new($self->config_file());\n+    unless (-e $config) {\n+        die $self->error_message(\"Couldn't find $config on the file system!\");\n+    }\n+\n+    return $config;\n+}\n+\n+sub fetch_output_directory {\n+    my $self = shift;\n+    my $dir = Path::Class::Dir->new($self->output_directory());\n+    unless (-d $dir) {\n+        $self->status_message(\n+            \"'$dir' doesn't exist on file system.\"\n+            . \"Making path\"\n+        );\n+\n+        $dir->mkpath or die $self->error_message(\n+            \"Couldn't make directory $dir on the file system!\"\n+        );\n+    }\n+\n+    return $dir;\n+}\n+\n+sub help_brief {\n+    return \"Validate multiple VCF files to a specified Gold Standard Set\";\n+}\n+\n+sub help_detail {\n+    my $doc = q{\n+      This tool is a wrapper process to Genome::Model::Tools::Vcf::EvaluateVcf.","path":"lib/perl/Genome/Model/Tools/Vcf/EvaluateVcfs.pm","position":353,"original_position":353,"commit_id":"04ffb154d2fda9c8eb59a7d8086d9edeb968a5cd","original_commit_id":"04ffb154d2fda9c8eb59a7d8086d9edeb968a5cd","user":{"login":"tmooney","id":187262,"avatar_url":"https://avatars.githubusercontent.com/u/187262?v=3","gravatar_id":"","url":"https://api.github.com/users/tmooney","html_url":"https://github.com/tmooney","followers_url":"https://api.github.com/users/tmooney/followers","following_url":"https://api.github.com/users/tmooney/following{/other_user}","gists_url":"https://api.github.com/users/tmooney/gists{/gist_id}","starred_url":"https://api.github.com/users/tmooney/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tmooney/subscriptions","organizations_url":"https://api.github.com/users/tmooney/orgs","repos_url":"https://api.github.com/users/tmooney/repos","events_url":"https://api.github.com/users/tmooney/events{/privacy}","received_events_url":"https://api.github.com/users/tmooney/received_events","type":"User","site_admin":false},"body":"It might make more sense for the documentation to refer to `gmt vcf evaluate-vcf` than its Perl class.","created_at":"2015-04-21T21:53:25Z","updated_at":"2015-04-21T21:53:25Z","html_url":"https://github.com/genome/genome/pull/679#discussion_r28826373","pull_request_url":"https://api.github.com/repos/genome/genome/pulls/679","_links":{"self":{"href":"https://api.github.com/repos/genome/genome/pulls/comments/28826373"},"html":{"href":"https://github.com/genome/genome/pull/679#discussion_r28826373"},"pull_request":{"href":"https://api.github.com/repos/genome/genome/pulls/679"}}},"pull_request":{"url":"https://api.github.com/repos/genome/genome/pulls/679","id":33793701,"html_url":"https://github.com/genome/genome/pull/679","diff_url":"https://github.com/genome/genome/pull/679.diff","patch_url":"https://github.com/genome/genome/pull/679.patch","issue_url":"https://api.github.com/repos/genome/genome/issues/679","number":679,"state":"open","locked":false,"title":"GMT Integration of VCF Evaluation (part 2)","user":{"login":"indraniel","id":42710,"avatar_url":"https://avatars.githubusercontent.com/u/42710?v=3","gravatar_id":"","url":"https://api.github.com/users/indraniel","html_url":"https://github.com/indraniel","followers_url":"https://api.github.com/users/indraniel/followers","following_url":"https://api.github.com/users/indraniel/following{/other_user}","gists_url":"https://api.github.com/users/indraniel/gists{/gist_id}","starred_url":"https://api.github.com/users/indraniel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/indraniel/subscriptions","organizations_url":"https://api.github.com/users/indraniel/orgs","repos_url":"https://api.github.com/users/indraniel/repos","events_url":"https://api.github.com/users/indraniel/events{/privacy}","received_events_url":"https://api.github.com/users/indraniel/received_events","type":"User","site_admin":false},"body":"This is part 2 of a roll out to integrate the [VCF Evaluation scripts][1] within the genome codebase. The aim of this pull request is to get [evaluate_vcfs.pl][2] setup as a GMT. \r\n\r\n[1]: https://github.com/genome/vcf-evaluation\r\n[2]: https://github.com/genome/vcf-evaluation/blob/master/evaluate_vcfs.pl","created_at":"2015-04-21T19:15:28Z","updated_at":"2015-04-21T21:53:25Z","closed_at":null,"merged_at":null,"merge_commit_sha":"b532b7ddfba73383c2500775dbdeb8cc5022b68f","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/genome/genome/pulls/679/commits","review_comments_url":"https://api.github.com/repos/genome/genome/pulls/679/comments","review_comment_url":"https://api.github.com/repos/genome/genome/pulls/comments{/number}","comments_url":"https://api.github.com/repos/genome/genome/issues/679/comments","statuses_url":"https://api.github.com/repos/genome/genome/statuses/04ffb154d2fda9c8eb59a7d8086d9edeb968a5cd","head":{"label":"indraniel:vcf-evaluate-pt2","ref":"vcf-evaluate-pt2","sha":"04ffb154d2fda9c8eb59a7d8086d9edeb968a5cd","user":{"login":"indraniel","id":42710,"avatar_url":"https://avatars.githubusercontent.com/u/42710?v=3","gravatar_id":"","url":"https://api.github.com/users/indraniel","html_url":"https://github.com/indraniel","followers_url":"https://api.github.com/users/indraniel/followers","following_url":"https://api.github.com/users/indraniel/following{/other_user}","gists_url":"https://api.github.com/users/indraniel/gists{/gist_id}","starred_url":"https://api.github.com/users/indraniel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/indraniel/subscriptions","organizations_url":"https://api.github.com/users/indraniel/orgs","repos_url":"https://api.github.com/users/indraniel/repos","events_url":"https://api.github.com/users/indraniel/events{/privacy}","received_events_url":"https://api.github.com/users/indraniel/received_events","type":"User","site_admin":false},"repo":{"id":23680310,"name":"genome","full_name":"indraniel/genome","owner":{"login":"indraniel","id":42710,"avatar_url":"https://avatars.githubusercontent.com/u/42710?v=3","gravatar_id":"","url":"https://api.github.com/users/indraniel","html_url":"https://github.com/indraniel","followers_url":"https://api.github.com/users/indraniel/followers","following_url":"https://api.github.com/users/indraniel/following{/other_user}","gists_url":"https://api.github.com/users/indraniel/gists{/gist_id}","starred_url":"https://api.github.com/users/indraniel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/indraniel/subscriptions","organizations_url":"https://api.github.com/users/indraniel/orgs","repos_url":"https://api.github.com/users/indraniel/repos","events_url":"https://api.github.com/users/indraniel/events{/privacy}","received_events_url":"https://api.github.com/users/indraniel/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/indraniel/genome","description":"","fork":true,"url":"https://api.github.com/repos/indraniel/genome","forks_url":"https://api.github.com/repos/indraniel/genome/forks","keys_url":"https://api.github.com/repos/indraniel/genome/keys{/key_id}","collaborators_url":"https://api.github.com/repos/indraniel/genome/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/indraniel/genome/teams","hooks_url":"https://api.github.com/repos/indraniel/genome/hooks","issue_events_url":"https://api.github.com/repos/indraniel/genome/issues/events{/number}","events_url":"https://api.github.com/repos/indraniel/genome/events","assignees_url":"https://api.github.com/repos/indraniel/genome/assignees{/user}","branches_url":"https://api.github.com/repos/indraniel/genome/branches{/branch}","tags_url":"https://api.github.com/repos/indraniel/genome/tags","blobs_url":"https://api.github.com/repos/indraniel/genome/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/indraniel/genome/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/indraniel/genome/git/refs{/sha}","trees_url":"https://api.github.com/repos/indraniel/genome/git/trees{/sha}","statuses_url":"https://api.github.com/repos/indraniel/genome/statuses/{sha}","languages_url":"https://api.github.com/repos/indraniel/genome/languages","stargazers_url":"https://api.github.com/repos/indraniel/genome/stargazers","contributors_url":"https://api.github.com/repos/indraniel/genome/contributors","subscribers_url":"https://api.github.com/repos/indraniel/genome/subscribers","subscription_url":"https://api.github.com/repos/indraniel/genome/subscription","commits_url":"https://api.github.com/repos/indraniel/genome/commits{/sha}","git_commits_url":"https://api.github.com/repos/indraniel/genome/git/commits{/sha}","comments_url":"https://api.github.com/repos/indraniel/genome/comments{/number}","issue_comment_url":"https://api.github.com/repos/indraniel/genome/issues/comments{/number}","contents_url":"https://api.github.com/repos/indraniel/genome/contents/{+path}","compare_url":"https://api.github.com/repos/indraniel/genome/compare/{base}...{head}","merges_url":"https://api.github.com/repos/indraniel/genome/merges","archive_url":"https://api.github.com/repos/indraniel/genome/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/indraniel/genome/downloads","issues_url":"https://api.github.com/repos/indraniel/genome/issues{/number}","pulls_url":"https://api.github.com/repos/indraniel/genome/pulls{/number}","milestones_url":"https://api.github.com/repos/indraniel/genome/milestones{/number}","notifications_url":"https://api.github.com/repos/indraniel/genome/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/indraniel/genome/labels{/name}","releases_url":"https://api.github.com/repos/indraniel/genome/releases{/id}","created_at":"2014-09-04T21:39:49Z","updated_at":"2015-04-19T01:36:31Z","pushed_at":"2015-04-21T21:47:50Z","git_url":"git://github.com/indraniel/genome.git","ssh_url":"git@github.com:indraniel/genome.git","clone_url":"https://github.com/indraniel/genome.git","svn_url":"https://github.com/indraniel/genome","homepage":"","size":116327,"stargazers_count":0,"watchers_count":0,"language":"Perl","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"genome:master","ref":"master","sha":"b19d08f28f4147c9be83c103613df13e7f378189","user":{"login":"genome","id":318108,"avatar_url":"https://avatars.githubusercontent.com/u/318108?v=3","gravatar_id":"","url":"https://api.github.com/users/genome","html_url":"https://github.com/genome","followers_url":"https://api.github.com/users/genome/followers","following_url":"https://api.github.com/users/genome/following{/other_user}","gists_url":"https://api.github.com/users/genome/gists{/gist_id}","starred_url":"https://api.github.com/users/genome/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/genome/subscriptions","organizations_url":"https://api.github.com/users/genome/orgs","repos_url":"https://api.github.com/users/genome/repos","events_url":"https://api.github.com/users/genome/events{/privacy}","received_events_url":"https://api.github.com/users/genome/received_events","type":"Organization","site_admin":false},"repo":{"id":23442737,"name":"genome","full_name":"genome/genome","owner":{"login":"genome","id":318108,"avatar_url":"https://avatars.githubusercontent.com/u/318108?v=3","gravatar_id":"","url":"https://api.github.com/users/genome","html_url":"https://github.com/genome","followers_url":"https://api.github.com/users/genome/followers","following_url":"https://api.github.com/users/genome/following{/other_user}","gists_url":"https://api.github.com/users/genome/gists{/gist_id}","starred_url":"https://api.github.com/users/genome/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/genome/subscriptions","organizations_url":"https://api.github.com/users/genome/orgs","repos_url":"https://api.github.com/users/genome/repos","events_url":"https://api.github.com/users/genome/events{/privacy}","received_events_url":"https://api.github.com/users/genome/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/genome/genome","description":"Core modules used by the GMS","fork":false,"url":"https://api.github.com/repos/genome/genome","forks_url":"https://api.github.com/repos/genome/genome/forks","keys_url":"https://api.github.com/repos/genome/genome/keys{/key_id}","collaborators_url":"https://api.github.com/repos/genome/genome/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/genome/genome/teams","hooks_url":"https://api.github.com/repos/genome/genome/hooks","issue_events_url":"https://api.github.com/repos/genome/genome/issues/events{/number}","events_url":"https://api.github.com/repos/genome/genome/events","assignees_url":"https://api.github.com/repos/genome/genome/assignees{/user}","branches_url":"https://api.github.com/repos/genome/genome/branches{/branch}","tags_url":"https://api.github.com/repos/genome/genome/tags","blobs_url":"https://api.github.com/repos/genome/genome/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/genome/genome/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/genome/genome/git/refs{/sha}","trees_url":"https://api.github.com/repos/genome/genome/git/trees{/sha}","statuses_url":"https://api.github.com/repos/genome/genome/statuses/{sha}","languages_url":"https://api.github.com/repos/genome/genome/languages","stargazers_url":"https://api.github.com/repos/genome/genome/stargazers","contributors_url":"https://api.github.com/repos/genome/genome/contributors","subscribers_url":"https://api.github.com/repos/genome/genome/subscribers","subscription_url":"https://api.github.com/repos/genome/genome/subscription","commits_url":"https://api.github.com/repos/genome/genome/commits{/sha}","git_commits_url":"https://api.github.com/repos/genome/genome/git/commits{/sha}","comments_url":"https://api.github.com/repos/genome/genome/comments{/number}","issue_comment_url":"https://api.github.com/repos/genome/genome/issues/comments{/number}","contents_url":"https://api.github.com/repos/genome/genome/contents/{+path}","compare_url":"https://api.github.com/repos/genome/genome/compare/{base}...{head}","merges_url":"https://api.github.com/repos/genome/genome/merges","archive_url":"https://api.github.com/repos/genome/genome/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/genome/genome/downloads","issues_url":"https://api.github.com/repos/genome/genome/issues{/number}","pulls_url":"https://api.github.com/repos/genome/genome/pulls{/number}","milestones_url":"https://api.github.com/repos/genome/genome/milestones{/number}","notifications_url":"https://api.github.com/repos/genome/genome/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/genome/genome/labels{/name}","releases_url":"https://api.github.com/repos/genome/genome/releases{/id}","created_at":"2014-08-28T20:59:19Z","updated_at":"2015-04-21T21:11:50Z","pushed_at":"2015-04-21T21:47:55Z","git_url":"git://github.com/genome/genome.git","ssh_url":"git@github.com:genome/genome.git","clone_url":"https://github.com/genome/genome.git","svn_url":"https://github.com/genome/genome","homepage":"","size":141337,"stargazers_count":8,"watchers_count":8,"language":"Perl","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":36,"mirror_url":null,"open_issues_count":8,"forks":36,"open_issues":8,"watchers":8,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/genome/genome/pulls/679"},"html":{"href":"https://github.com/genome/genome/pull/679"},"issue":{"href":"https://api.github.com/repos/genome/genome/issues/679"},"comments":{"href":"https://api.github.com/repos/genome/genome/issues/679/comments"},"review_comments":{"href":"https://api.github.com/repos/genome/genome/pulls/679/comments"},"review_comment":{"href":"https://api.github.com/repos/genome/genome/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/genome/genome/pulls/679/commits"},"statuses":{"href":"https://api.github.com/repos/genome/genome/statuses/04ffb154d2fda9c8eb59a7d8086d9edeb968a5cd"}}}}