{"action":"created","comment":{"url":"https://api.github.com/repos/genome/genome/pulls/comments/26435613","id":26435613,"diff_hunk":"@@ -0,0 +1,367 @@\n+package Genome::Model::Tools::Transcriptome::ErccMapUnaligned;\n+\n+use strict;\n+use warnings;\n+\n+use Genome;\n+use Path::Class;\n+\n+class Genome::Model::Tools::Transcriptome::ErccMapUnaligned {\n+    is => 'Command::V2',\n+    has_input => [\n+        bam_file => {\n+            is => 'Text',\n+            doc => 'An aligned BAM file to a reference genome without the ERCC transcripts spiked in.',\n+        },\n+        ercc_fasta_file => {\n+            is => 'Text',\n+            doc => 'The FASTA format sequence for all ERCC transcripts.',\n+            example_values => ['/gscmnt/gc13001/info/model_data/jwalker_scratch/ERCC/ERCC92.fa'],\n+        },\n+        ercc_spike_in_file => {\n+            is => 'Text',\n+            doc => 'The control analysis file provided by Agilent for the ERCC spike-in.',\n+            example_values => ['/gscmnt/gc13001/info/model_data/jwalker_scratch/ERCC/ERCC_Controls_Analysis.txt'],\n+        },\n+        ercc_spike_in_mix => {\n+            is => 'Integer',\n+            doc => 'The expected ERCC spike-in mix.',\n+            valid_values => [ '1', '2'],\n+        },\n+        samtools_version => {\n+            is => 'Text',\n+            doc => 'The version of samtools to run analysis.',\n+            example_values => ['1.2'],\n+            default_value => '1.2',\n+            is_optional => '1',\n+        },\n+        samtools_max_mem => {\n+            is => 'Text',\n+            doc => 'The max memory required by samtools.',\n+            example_values => ['14000000000'],\n+            default_value => '14000000000',\n+            is_optional => '1',\n+        },\n+        bowtie2_version => {\n+            is => 'Text',\n+            doc => 'The version of bwa to run analysis.',\n+            example_values => ['2.1.0'],\n+            default_value => '2.1.0',\n+            is_optional => '1',\n+        },\n+    ],\n+    has_output => [\n+        pdf_file => {\n+            is => 'Text',\n+            doc => 'The output PDF with histograms and linearity plot.',\n+            default_value => 'output.pdf',\n+            is_optional => '1',\n+        }\n+    ],\n+};\n+\n+sub help_detail {\n+    return <<EOS\n+Compare the abundance of an ERCC spike-in with a known concentration.\n+EOS\n+}\n+\n+sub execute {\n+    my $self = shift;\n+    \n+    my $ercc_bowtie_index = $self->create_ercc_bowtie_index();\n+\n+    my $remapped_bam = $self->generate_remapped_bam(\n+        index => $ercc_bowtie_index,\n+        input_bam => $self->bam_file,\n+    );\n+\n+    $self->index_bam($remapped_bam);\n+    my $idxstats = $self->generate_idxstats($remapped_bam);\n+    my $tsv = $self->generate_tsvfile($idxstats);\n+    $self->copy_to( $tsv, Path::Class::Dir->new() );\n+\n+    $self->run_analysis_script($tsv);\n+\n+    return 1;\n+}\n+\n+sub samtools {\n+    my $self = shift;\n+    my $version = $self->samtools_version;\n+#    my $samtools_path =\n+#      Genome::Model::Tools::Sam->path_for_samtools_version($version);\n+\n+    my $samtools_path = '/usr/bin/samtools1.2';\n+\n+    return $samtools_path;\n+}\n+\n+sub bowtie2_align {\n+    my $self = shift;\n+    my $version = $self->bowtie2_version;\n+    my $bowtie2_dir = Path::Class::Dir->new(\"/usr/bin\");\n+    my $bowtie2_align = $bowtie2_dir->file('bowtie2-align' . $version);\n+    unless (-e $bowtie2_align) {\n+        die \"[err] Couldn't find '$bowtie2_align' on the file system!\\n\";\n+    }\n+    return $bowtie2_align;\n+}\n+\n+sub bowtie2_build {\n+    my $self = shift;\n+    my $version = $self->bowtie2_version;\n+    my $bowtie2_dir = Path::Class::Dir->new(\"/usr/bin\");\n+    my $bowtie2_build = $bowtie2_dir->file('bowtie2-build' . $version);\n+    unless (-e $bowtie2_build) {\n+        die \"[err] Couldn't find '$bowtie2_build' on the file system!\\n\";\n+    }\n+    return $bowtie2_build;\n+}\n+\n+sub ERCC_analysis_script {\n+    my $self = shift;\n+    my $ercc_r = $self->__meta__->module_path;\n+    $ercc_r =~ s/\\.pm/\\.R/;\n+    return $ercc_r;\n+}\n+\n+sub run_analysis_script {\n+    my ($self, $tsv) = @_;\n+    my $ercc_r = $self->ERCC_analysis_script;\n+    my $cmd = \"$ercc_r --data $tsv\";\n+    Genome::Sys->shellcmd(cmd => $cmd);\n+}\n+\n+sub load_ercc_control_info {\n+    my $self = shift;\n+    my %ercc_control;\n+    my $ercc_spike_in_reader = Genome::Utility::IO::SeparatedValueReader->create(\n+        input => $self->ercc_spike_in_file,\n+        separator => \"\\t\",\n+    );\n+    while (my $data = $ercc_spike_in_reader->next) {\n+        $ercc_control{$data->{'ERCC ID'}} = $data;\n+    }\n+    $ercc_spike_in_reader->input->close;\n+\n+    return %ercc_control\n+}\n+\n+sub create_ercc_bowtie_index {\n+    my $self = shift;\n+\n+    my $index_dir = Path::Class::Dir->new(\n+        Genome::Sys->create_temp_directory('bowtie2-index')\n+    );\n+    my $fasta = Path::Class::File->new($self->ercc_fasta_file);\n+\n+    my $cmd = join(' ',\n+        \"cd $index_dir &&\",\n+        $self->bowtie2_build->stringify, \"$fasta\", 'ERCC',\n+        '1>/dev/null'\n+    );\n+\n+    Genome::Sys->shellcmd(\n+        cmd => $cmd,\n+        input_files => [$fasta->stringify],\n+    );\n+\n+    my $search_pattern = $index_dir->file('ERCC.*');\n+    my @index_files = glob(\"$search_pattern\");\n+    unless (@index_files == 6) {\n+        die \"[err] Didn't create the proper bowtie2 index file set in \",\n+          \"$index_dir !\\n\";\n+    }\n+\n+    return $index_dir->file('ERCC');\n+}\n+\n+sub generate_remapped_bam {\n+    my $self = shift;\n+    my %args = @_;\n+    my ($index, $input_bam) = @args{'index', 'input_bam'};\n+\n+    $input_bam = Path::Class::File->new($input_bam);\n+\n+    my $remapped_bam_basename = Genome::Sys->create_temp_file_path();\n+    my $remapped_bam_path =\n+      Path::Class::File->new($remapped_bam_basename . '.bam');\n+\n+\n+    my $max_mem = $self->samtools_max_mem;\n+\n+    # get the unaligned records from the input bam\n+    my $cmd1 = join(' ',\n+        $self->samtools, 'view', '-@ 4 -h -b -f 12',\n+        \"$input_bam\", q{'*'}\n+    );\n+\n+    # gather the unaligned reads\n+    my $cmd2 = join(' ',\n+        $self->samtools, 'bam2fq',\n+        '-s /dev/null',\n+        '-'\n+    );\n+\n+    # align the unaligned reads against the ERCC reference with bowtie2\n+    my $bowtie_stderr = Path::Class::Dir->new(\n+        Genome::Sys->create_temp_file_path('bowtie2.stderr')\n+    );\n+    my $cmd3 = join(' ',\n+        $self->bowtie2_align->stringify,\n+        \"-x $index\",\n+        '-U -',\n+        '--very-fast',\n+        '--threads 4',\n+        \"2>$bowtie_stderr\"\n+    );\n+\n+    # sort the remapped alignments and generate the remapped bam\n+    my $cmd4 = join(' ',\n+        $self->samtools, 'sort',\n+        '-@ 4',\n+        \"-m $max_mem\",\n+        '-',\n+        \"$remapped_bam_basename\"\n+    );\n+\n+    my $stdout =\n+      Path::Class::Dir->new(\n+          Genome::Sys->create_temp_file_path('bowtie-remapped.stdout')\n+      );\n+    my $stderr = Path::Class::Dir->new(\n+        Genome::Sys->create_temp_file_path('bowtie-remapped.stderr')\n+    );\n+\n+    my $stream = Genome::Sys::ShellPipeline->create(\n+        pipe_commands => [$cmd1, $cmd2, $cmd3, $cmd4],\n+        redirects => \"> $stdout 2> $stderr\",\n+    );\n+\n+    $stream->execute\n+      or die \"[err] Trouble executing remapped bam stream command!\\n\";\n+\n+    unless (-e $remapped_bam_path) {\n+        die \"[err] Couldn't find the remapped bam: $remapped_bam_path \\n!\";\n+    }\n+\n+    return $remapped_bam_path;\n+}\n+\n+sub index_bam {\n+    my ($self, $bam) = @_;\n+\n+    my $cmd = join(' ', $self->samtools, 'index', \"$bam\");\n+    my $index_file = Path::Class::File->new(\n+        $bam->stringify . '.bai'\n+    );\n+\n+    Genome::Sys->shellcmd(\n+        cmd => $cmd,\n+        input_files => [\"$bam\"],\n+        output_files => [\"$index_file\"],\n+        skip_if_output_is_present => 0\n+    );\n+}\n+\n+sub generate_idxstats {\n+    my ($self, $bam) = @_;\n+\n+    my $samtools_idxstats_path = Path::Class::File->new(Genome::Sys->create_temp_file_path());\n+\n+    my $cmd = join(' ',\n+        $self->samtools, 'idxstats',\n+        \"$bam\", \n+        '>', \"$samtools_idxstats_path\"\n+    );\n+\n+    Genome::Sys->shellcmd(\n+        cmd => $cmd,\n+        input_files => [\"$bam\"],\n+        output_files => [\"$samtools_idxstats_path\"],\n+        skip_if_output_is_present => 0\n+    );\n+\n+    my $idxstats_hash_ref = Genome::Model::Tools::Sam::Idxstats->parse_file_into_hashref(\n+        \"$samtools_idxstats_path\"\n+    );\n+\n+    return $idxstats_hash_ref;\n+}\n+\n+sub generate_tsvfile {\n+    my ($self, $idxstats) = @_;\n+\n+    my $r_input_file = Genome::Sys->create_temp_file_path();\n+\n+    my @headers = (\n+        'Re-sort ID',\n+        'ERCC ID',\n+        'subgroup',\n+        'ERCC Mix',\n+        'concentration (attomoles/ul)',\n+        'label',\n+        'count',\n+    );\n+\n+    my $writer = Genome::Utility::IO::SeparatedValueWriter->create(\n+        output => $r_input_file,\n+        headers => \\@headers,\n+        separator => \"\\t\",\n+    );\n+\n+    my %ercc_control = $self->load_ercc_control_info;\n+\n+    for my $chr (keys %{$idxstats}) {\n+        my $ercc_data = $ercc_control{$chr};\n+        unless ($ercc_data) {\n+            die('Missing chromosome: '. $chr);\n+        }\n+        my $concentration = $ercc_data->{'concentration in Mix 1 (attomoles/ul)'};\n+        if ($self->ercc_spike_in_mix == 2) {\n+            $concentration = $ercc_data->{'concentration in Mix 2 (attomoles/ul)'};\n+        }\n+        my %data = (\n+            'Re-sort ID' => $ercc_data->{'Re-sort ID'},\n+            'ERCC ID' => $ercc_data->{'ERCC ID'},\n+            'subgroup' => $ercc_data->{'subgroup'},\n+            'ERCC Mix' => $self->ercc_spike_in_mix,\n+            'concentration (attomoles/ul)' => $concentration,\n+            'label' => 'na',\n+            'count' => $idxstats->{$chr}{map_read_ct},\n+        );\n+        $writer->write_one(\\%data);\n+    }\n+    $writer->output->close;\n+\n+    return Path::Class::File->new($r_input_file);\n+}\n+\n+sub copy_to {","path":"lib/perl/Genome/Model/Tools/Transcriptome/ErccMapUnaligned.pm","position":null,"original_position":341,"commit_id":"d8b399bdfa10d7810285ba89d6c91623adc31921","original_commit_id":"9b961f1496ae03efff161f70f8a29cf1f896eee5","user":{"login":"nnutter","id":207011,"avatar_url":"https://avatars.githubusercontent.com/u/207011?v=3","gravatar_id":"","url":"https://api.github.com/users/nnutter","html_url":"https://github.com/nnutter","followers_url":"https://api.github.com/users/nnutter/followers","following_url":"https://api.github.com/users/nnutter/following{/other_user}","gists_url":"https://api.github.com/users/nnutter/gists{/gist_id}","starred_url":"https://api.github.com/users/nnutter/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nnutter/subscriptions","organizations_url":"https://api.github.com/users/nnutter/orgs","repos_url":"https://api.github.com/users/nnutter/repos","events_url":"https://api.github.com/users/nnutter/events{/privacy}","received_events_url":"https://api.github.com/users/nnutter/received_events","type":"User","site_admin":false},"body":"The permission comment would be relevant there as well.","created_at":"2015-03-14T05:28:13Z","updated_at":"2015-03-14T05:28:13Z","html_url":"https://github.com/genome/genome/pull/557#discussion_r26435613","pull_request_url":"https://api.github.com/repos/genome/genome/pulls/557","_links":{"self":{"href":"https://api.github.com/repos/genome/genome/pulls/comments/26435613"},"html":{"href":"https://github.com/genome/genome/pull/557#discussion_r26435613"},"pull_request":{"href":"https://api.github.com/repos/genome/genome/pulls/557"}}},"pull_request":{"url":"https://api.github.com/repos/genome/genome/pulls/557","id":30969574,"html_url":"https://github.com/genome/genome/pull/557","diff_url":"https://github.com/genome/genome/pull/557.diff","patch_url":"https://github.com/genome/genome/pull/557.patch","issue_url":"https://api.github.com/repos/genome/genome/issues/557","number":557,"state":"open","locked":false,"title":"ERCC-based Quality Control Screening for RNASeq: Part 1","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 1 of a 2-part introduction of a RNASeq quality control tool to address a need mentioned in BIO-1345.\r\n\r\nThe tool utilizes the latest version of samtools, `samtools1.2`,  which was installed by @iferguson90 in [genome-snapshots-deps pull request #17][1] and `bowtie2.1.0`.  The latest version of `samtools` and `bowtie2` haven't been quite integrated into `G::M::T::Sam` and `G::M::T::Bowtie` respectively,  because they have a different installation scheme than earlier versions.\r\n\r\nI think @iferguson90 is already working on addressing the \"`samtools` integration into Genome\" issue.\r\n\r\nAs I needed to use these newer software editions within the context of the ERCC analysis, I've \"homebrewed\" its usage inside this tool, rather than interfering with @iferguson90's current work.  Hopefully I've set this up so that it can be adjusted later to \"do the right thing\" when the tools are better integrated.\r\n\r\nLet me know what you all think.\r\n\r\nPart 2 will deal with adjustments to the R script that this tools ends up running in its end analysis.\r\n\r\n[1]: https://github.com/genome/genome-snapshot-deps/pull/17","created_at":"2015-03-11T18:08:21Z","updated_at":"2015-03-14T05:28:13Z","closed_at":null,"merged_at":null,"merge_commit_sha":"899b028253de0042c0e3cf902c1da44e4a40cc42","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/genome/genome/pulls/557/commits","review_comments_url":"https://api.github.com/repos/genome/genome/pulls/557/comments","review_comment_url":"https://api.github.com/repos/genome/genome/pulls/comments{/number}","comments_url":"https://api.github.com/repos/genome/genome/issues/557/comments","statuses_url":"https://api.github.com/repos/genome/genome/statuses/d8b399bdfa10d7810285ba89d6c91623adc31921","head":{"label":"indraniel:ercc-map-unaligned-experiment-pt1","ref":"ercc-map-unaligned-experiment-pt1","sha":"d8b399bdfa10d7810285ba89d6c91623adc31921","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-03-11T17:29:54Z","pushed_at":"2015-03-13T23:30:25Z","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":112451,"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":"9d22a6d8b1057ade52ab3c69b16e10c1e6736756","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-03-14T01:06:51Z","pushed_at":"2015-03-14T01:06:51Z","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":125202,"stargazers_count":7,"watchers_count":7,"language":"Perl","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":35,"mirror_url":null,"open_issues_count":16,"forks":35,"open_issues":16,"watchers":7,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/genome/genome/pulls/557"},"html":{"href":"https://github.com/genome/genome/pull/557"},"issue":{"href":"https://api.github.com/repos/genome/genome/issues/557"},"comments":{"href":"https://api.github.com/repos/genome/genome/issues/557/comments"},"review_comments":{"href":"https://api.github.com/repos/genome/genome/pulls/557/comments"},"review_comment":{"href":"https://api.github.com/repos/genome/genome/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/genome/genome/pulls/557/commits"},"statuses":{"href":"https://api.github.com/repos/genome/genome/statuses/d8b399bdfa10d7810285ba89d6c91623adc31921"}}}}