{"action":"created","comment":{"url":"https://api.github.com/repos/broadinstitute/gatk/pulls/comments/65926824","id":65926824,"diff_hunk":"@@ -0,0 +1,229 @@\n+package org.broadinstitute.hellbender.tools.walkers.annotator;\n+\n+import htsjdk.variant.variantcontext.Allele;\n+import htsjdk.variant.variantcontext.GenotypesContext;\n+import htsjdk.variant.variantcontext.VariantContext;\n+import htsjdk.variant.vcf.VCFInfoHeaderLine;\n+import org.apache.log4j.Logger;\n+import org.broadinstitute.hellbender.engine.ReferenceContext;\n+import org.broadinstitute.hellbender.utils.genotyper.MostLikelyAllele;\n+import org.broadinstitute.hellbender.utils.genotyper.PerReadAlleleLikelihoodMap;\n+import org.broadinstitute.hellbender.utils.read.GATKRead;\n+import org.broadinstitute.hellbender.utils.variant.GATKVCFConstants;\n+import org.broadinstitute.hellbender.utils.variant.GATKVCFHeaderLines;\n+\n+import java.util.*;\n+\n+/**\n+ * Allele-specific implementation of strand bias annotations\n+ */\n+public abstract class AS_StrandBiasTest extends StrandBiasTest implements ReducibleAnnotation {\n+    private final static Logger logger = Logger.getLogger(AS_StrandBiasTest.class);\n+    protected static final String splitDelim = \"\\\\|\"; //String.split takes a regex, so we need to escape the pipe\n+    protected static final String printDelim = \"|\";\n+    protected static final String reducedDelim = \",\";\n+    protected static final int MIN_COUNT = 2;\n+    protected static final double MIN_PVALUE = 1E-320;\n+    protected static final int FORWARD = 0;\n+    protected static final int REVERSE = 1;\n+    protected final List<Integer> ZERO_LIST = new ArrayList<>();\n+\n+    public AS_StrandBiasTest(){\n+        ZERO_LIST.add(0,0);\n+        ZERO_LIST.add(1,0);\n+    }\n+\n+    @Override\n+    public List<VCFInfoHeaderLine> getDescriptions() {\n+        //TODO only raw for now\n+//        if (AnnotationUtils.walkerRequiresRawData(callingWalker))\n+            return Arrays.asList(GATKVCFHeaderLines.getInfoLine(getRawKeyName()));\n+//        else\n+//            return Arrays.asList(GATKVCFHeaderLines.getInfoLine(getKeyNames().get(0)));\n+    }\n+\n+    @Override\n+    public String getRawKeyName() { return GATKVCFConstants.AS_SB_TABLE_KEY; }\n+\n+    @Override\n+    public Map<String, Object> annotate(final ReferenceContext ref,\n+                                        final VariantContext vc,\n+                                        final Map<String, PerReadAlleleLikelihoodMap> stratifiedPerReadAlleleLikelihoodMap) {\n+        return annotateRawData(ref, vc, stratifiedPerReadAlleleLikelihoodMap);\n+    }\n+\n+    @Override\n+    public Map<String, Object> annotateRawData(final ReferenceContext ref,\n+                                               final VariantContext vc,\n+                                               final Map<String, PerReadAlleleLikelihoodMap> perReadAlleleLikelihoodMap ) {\n+\n+        //for allele-specific annotations we only call from HC and we only use perReadAlleleLikelihoodMap\n+        if ( perReadAlleleLikelihoodMap == null) {\n+            return new HashMap<>();\n+            // calculate the annotation from the stratified per read likelihood map\n+            // stratifiedPerReadAllelelikelihoodMap can come from HaplotypeCaller call to VariantAnnotatorEngine\n+        } else if (perReadAlleleLikelihoodMap != null) {\n+            final Map<String, Object> annotations = new HashMap<>();\n+            final ReducibleAnnotationData<List<Integer>> myData = new AlleleSpecificAnnotationData<>(vc.getAlleles(),null);\n+            calculateRawData(vc, perReadAlleleLikelihoodMap, myData);\n+            final Map<Allele, List<Integer>> perAlleleValues = myData.getAttributeMap();\n+            final String annotationString = makeRawAnnotationString(vc.getAlleles(), perAlleleValues);\n+            annotations.put(getRawKeyName(), annotationString);\n+            return annotations;\n+        } else {\n+            // for non-snp variants, we need per-read likelihoods.\n+            // for snps, we can get same result from simple pileup\n+            // for indels that do not have a computed strand bias (SB) or strand bias by sample (SBBS)\n+            return null;\n+        }\n+    }\n+\n+    protected String makeRawAnnotationString(final List<Allele> vcAlleles, final Map<Allele, List<Integer>> perAlleleValues) {\n+        String annotationString = \"\";\n+        for (final Allele a : vcAlleles) {\n+            if (!annotationString.isEmpty())\n+                annotationString += printDelim;\n+            List<Integer> alleleValues = perAlleleValues.get(a);\n+            if (alleleValues == null)\n+                alleleValues = ZERO_LIST;\n+            annotationString += encode(alleleValues);\n+        }\n+        return annotationString;\n+    }\n+\n+    protected String encode(List<Integer> alleleValues) {\n+        String annotationString = \"\";\n+        for (int j =0; j < alleleValues.size(); j++) {\n+            annotationString += alleleValues.get(j);\n+            if (j < alleleValues.size()-1)\n+                annotationString += \",\";\n+        }\n+        return annotationString;\n+    }\n+\n+    @Override\n+    @SuppressWarnings({\"unchecked\", \"rawtypes\"})//FIXME\n+    public void calculateRawData(final VariantContext vc,\n+                                 final Map<String, PerReadAlleleLikelihoodMap> pralm,\n+                                 final ReducibleAnnotationData rawAnnotations) {\n+        if(pralm == null) {\n+            return;\n+        }\n+\n+        getStrandCountsFromLikelihoodMap(vc, pralm, rawAnnotations, MIN_COUNT);\n+    }\n+\n+    /**\n+     Allocate and fill a 2x2 strand contingency table.  In the end, it'll look something like this:\n+     *             fw      rc\n+     *   allele1   #       #\n+     *   allele2   #       #\n+     * @return a 2x2 contingency table\n+     */\n+    public void getStrandCountsFromLikelihoodMap( final VariantContext vc,\n+                                                            final Map<String, PerReadAlleleLikelihoodMap> stratifiedPerReadAlleleLikelihoodMap,\n+                                                            final ReducibleAnnotationData<List<Integer>> perAlleleValues,\n+                                                            final int minCount) {\n+        if( stratifiedPerReadAlleleLikelihoodMap == null || vc == null ) {\n+            return;\n+        }\n+\n+        final Allele ref = vc.getReference();\n+        final List<Allele> allAlts = vc.getAlternateAlleles();\n+\n+        for (final PerReadAlleleLikelihoodMap maps : stratifiedPerReadAlleleLikelihoodMap.values() ) {\n+            final ReducibleAnnotationData<List<Integer>> sampleTable = new AlleleSpecificAnnotationData<>(vc.getAlleles(),null);\n+            for (final Map.Entry<GATKRead,Map<Allele,Double>> el : maps.getLikelihoodReadMap().entrySet()) {\n+                final MostLikelyAllele mostLikelyAllele = PerReadAlleleLikelihoodMap.getMostLikelyAllele(el.getValue());\n+                final GATKRead read = el.getKey();\n+                updateTable(mostLikelyAllele.getAlleleIfInformative(), read, ref, allAlts, sampleTable);\n+            }\n+            //for each sample (value in stratified PRALM), only include it if there are >minCount informative reads\n+            if ( passesMinimumThreshold(sampleTable, minCount) ) {\n+                combineAttributeMap(sampleTable, perAlleleValues);\n+            }\n+        }\n+    }\n+\n+\n+    protected void combineAttributeMap(final ReducibleAnnotationData<List<Integer>> toAdd, final ReducibleAnnotationData<List<Integer>> combined) {\n+        for (final Allele a : combined.getAlleles()) {\n+            if (toAdd.hasAttribute(a) && toAdd.getAttribute(a) != null) {\n+                if (combined.getAttribute(a) != null) {\n+                    combined.getAttribute(a).set(0, (int) combined.getAttribute(a).get(0) + (int) toAdd.getAttribute(a).get(0));\n+                    combined.getAttribute(a).set(1, (int) combined.getAttribute(a).get(1) + (int) toAdd.getAttribute(a).get(1));\n+                }\n+                else {\n+                    List<Integer> alleleData = new ArrayList<>();\n+                    alleleData.add(0, toAdd.getAttribute(a).get(0));\n+                    alleleData.add(1, toAdd.getAttribute(a).get(1));\n+                    combined.putAttribute(a,alleleData);\n+                }\n+            }\n+        }\n+    }\n+\n+    private void updateTable(final Allele bestAllele, final GATKRead read, final Allele ref, final List<Allele> allAlts, final ReducibleAnnotationData<List<Integer>> perAlleleValues) {\n+\n+        final boolean matchesRef = bestAllele.equals(ref, true);\n+        final boolean matchesAnyAlt = allAlts.contains(bestAllele);\n+\n+        //for uninformative reads\n+        if(bestAllele.isNoCall())\n+            return;\n+\n+        //can happen if a read's most likely allele has been removed when --max_alternate_alleles is exceeded\n+        if (!( matchesRef || matchesAnyAlt ))\n+            return;\n+\n+        final List<Integer> alleleStrandCounts;\n+        if (perAlleleValues.hasAttribute(bestAllele) && perAlleleValues.getAttribute(bestAllele) != null)\n+            alleleStrandCounts = perAlleleValues.getAttribute(bestAllele);\n+        else {\n+            alleleStrandCounts = new ArrayList<>();\n+            alleleStrandCounts.add(0,0);\n+            alleleStrandCounts.add(1,0);\n+        }\n+        final boolean isFW = !read.isReverseStrand();\n+        if (isFW) {\n+            alleleStrandCounts.set(FORWARD, alleleStrandCounts.get(FORWARD) + 1);\n+        } else {\n+            alleleStrandCounts.set(REVERSE, alleleStrandCounts.get(REVERSE) + 1);\n+        }\n+        perAlleleValues.putAttribute(bestAllele, alleleStrandCounts);\n+    }\n+\n+    /**\n+     * Does this strand data array pass the minimum threshold for inclusion?\n+     *\n+     * @param sampleTable  the per-allele fwd/rev read counts for a single sample\n+     * @param minCount The minimum threshold of counts in the array\n+     * @return true if it passes the minimum threshold, false otherwise\n+     */\n+    protected boolean passesMinimumThreshold(final ReducibleAnnotationData<List<Integer>> sampleTable, final int minCount) {\n+        // the read total must be greater than MIN_COUNT\n+        int readTotal = 0;\n+        for (final List<Integer> alleleValues : sampleTable.getAttributeMap().values()) {\n+            if (alleleValues != null) {\n+                readTotal += alleleValues.get(FORWARD);\n+                readTotal += alleleValues.get(REVERSE);\n+            }\n+        }\n+        return readTotal > minCount;\n+    }\n+\n+    @Override\n+    //This just calls the non-allele-specific code in StrandBiasTest.java\n+    protected abstract Map<String, Object> calculateAnnotationFromLikelihoodMap(final Map<String, PerReadAlleleLikelihoodMap> stratifiedPerReadAlleleLikelihoodMap,\n+                                                                                final VariantContext vc);\n+\n+    @Override\n+    //Allele-specific annotations cannot be called from walkers other than HaplotypeCaller","path":"src/main/java/org/broadinstitute/hellbender/tools/walkers/annotator/AS_StrandBiasTest.java","position":221,"original_position":221,"commit_id":"45ac05c9421e7abd2541e6e0f3042b900f6056d7","original_commit_id":"45ac05c9421e7abd2541e6e0f3042b900f6056d7","user":{"login":"akiezun","id":1993519,"avatar_url":"https://avatars.githubusercontent.com/u/1993519?v=3","gravatar_id":"","url":"https://api.github.com/users/akiezun","html_url":"https://github.com/akiezun","followers_url":"https://api.github.com/users/akiezun/followers","following_url":"https://api.github.com/users/akiezun/following{/other_user}","gists_url":"https://api.github.com/users/akiezun/gists{/gist_id}","starred_url":"https://api.github.com/users/akiezun/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akiezun/subscriptions","organizations_url":"https://api.github.com/users/akiezun/orgs","repos_url":"https://api.github.com/users/akiezun/repos","events_url":"https://api.github.com/users/akiezun/events{/privacy}","received_events_url":"https://api.github.com/users/akiezun/received_events","type":"User","site_admin":false},"body":"nowhere. we only have 1 thing that makes annotations","created_at":"2016-06-06T16:56:27Z","updated_at":"2016-06-06T16:56:27Z","html_url":"https://github.com/broadinstitute/gatk/pull/1840#discussion_r65926824","pull_request_url":"https://api.github.com/repos/broadinstitute/gatk/pulls/1840","_links":{"self":{"href":"https://api.github.com/repos/broadinstitute/gatk/pulls/comments/65926824"},"html":{"href":"https://github.com/broadinstitute/gatk/pull/1840#discussion_r65926824"},"pull_request":{"href":"https://api.github.com/repos/broadinstitute/gatk/pulls/1840"}}},"pull_request":{"url":"https://api.github.com/repos/broadinstitute/gatk/pulls/1840","id":70712178,"html_url":"https://github.com/broadinstitute/gatk/pull/1840","diff_url":"https://github.com/broadinstitute/gatk/pull/1840.diff","patch_url":"https://github.com/broadinstitute/gatk/pull/1840.patch","issue_url":"https://api.github.com/repos/broadinstitute/gatk/issues/1840","number":1840,"state":"open","locked":false,"title":"new PR for  allele specific annotations","user":{"login":"akiezun","id":1993519,"avatar_url":"https://avatars.githubusercontent.com/u/1993519?v=3","gravatar_id":"","url":"https://api.github.com/users/akiezun","html_url":"https://github.com/akiezun","followers_url":"https://api.github.com/users/akiezun/followers","following_url":"https://api.github.com/users/akiezun/following{/other_user}","gists_url":"https://api.github.com/users/akiezun/gists{/gist_id}","starred_url":"https://api.github.com/users/akiezun/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akiezun/subscriptions","organizations_url":"https://api.github.com/users/akiezun/orgs","repos_url":"https://api.github.com/users/akiezun/repos","events_url":"https://api.github.com/users/akiezun/events{/privacy}","received_events_url":"https://api.github.com/users/akiezun/received_events","type":"User","site_admin":false},"body":"adds originals to https://github.com/broadinstitute/gatk/pull/1825","created_at":"2016-05-19T15:12:48Z","updated_at":"2016-06-06T16:56:27Z","closed_at":null,"merged_at":null,"merge_commit_sha":"5e283ce1e613999953bd549e7d24f472546f779f","assignee":{"login":"akiezun","id":1993519,"avatar_url":"https://avatars.githubusercontent.com/u/1993519?v=3","gravatar_id":"","url":"https://api.github.com/users/akiezun","html_url":"https://github.com/akiezun","followers_url":"https://api.github.com/users/akiezun/followers","following_url":"https://api.github.com/users/akiezun/following{/other_user}","gists_url":"https://api.github.com/users/akiezun/gists{/gist_id}","starred_url":"https://api.github.com/users/akiezun/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akiezun/subscriptions","organizations_url":"https://api.github.com/users/akiezun/orgs","repos_url":"https://api.github.com/users/akiezun/repos","events_url":"https://api.github.com/users/akiezun/events{/privacy}","received_events_url":"https://api.github.com/users/akiezun/received_events","type":"User","site_admin":false},"milestone":null,"commits_url":"https://api.github.com/repos/broadinstitute/gatk/pulls/1840/commits","review_comments_url":"https://api.github.com/repos/broadinstitute/gatk/pulls/1840/comments","review_comment_url":"https://api.github.com/repos/broadinstitute/gatk/pulls/comments{/number}","comments_url":"https://api.github.com/repos/broadinstitute/gatk/issues/1840/comments","statuses_url":"https://api.github.com/repos/broadinstitute/gatk/statuses/45ac05c9421e7abd2541e6e0f3042b900f6056d7","head":{"label":"broadinstitute:ak_original_allelespecificannotations","ref":"ak_original_allelespecificannotations","sha":"45ac05c9421e7abd2541e6e0f3042b900f6056d7","user":{"login":"broadinstitute","id":393552,"avatar_url":"https://avatars.githubusercontent.com/u/393552?v=3","gravatar_id":"","url":"https://api.github.com/users/broadinstitute","html_url":"https://github.com/broadinstitute","followers_url":"https://api.github.com/users/broadinstitute/followers","following_url":"https://api.github.com/users/broadinstitute/following{/other_user}","gists_url":"https://api.github.com/users/broadinstitute/gists{/gist_id}","starred_url":"https://api.github.com/users/broadinstitute/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/broadinstitute/subscriptions","organizations_url":"https://api.github.com/users/broadinstitute/orgs","repos_url":"https://api.github.com/users/broadinstitute/repos","events_url":"https://api.github.com/users/broadinstitute/events{/privacy}","received_events_url":"https://api.github.com/users/broadinstitute/received_events","type":"Organization","site_admin":false},"repo":{"id":27452807,"name":"gatk","full_name":"broadinstitute/gatk","owner":{"login":"broadinstitute","id":393552,"avatar_url":"https://avatars.githubusercontent.com/u/393552?v=3","gravatar_id":"","url":"https://api.github.com/users/broadinstitute","html_url":"https://github.com/broadinstitute","followers_url":"https://api.github.com/users/broadinstitute/followers","following_url":"https://api.github.com/users/broadinstitute/following{/other_user}","gists_url":"https://api.github.com/users/broadinstitute/gists{/gist_id}","starred_url":"https://api.github.com/users/broadinstitute/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/broadinstitute/subscriptions","organizations_url":"https://api.github.com/users/broadinstitute/orgs","repos_url":"https://api.github.com/users/broadinstitute/repos","events_url":"https://api.github.com/users/broadinstitute/events{/privacy}","received_events_url":"https://api.github.com/users/broadinstitute/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/broadinstitute/gatk","description":"GATK4 development","fork":false,"url":"https://api.github.com/repos/broadinstitute/gatk","forks_url":"https://api.github.com/repos/broadinstitute/gatk/forks","keys_url":"https://api.github.com/repos/broadinstitute/gatk/keys{/key_id}","collaborators_url":"https://api.github.com/repos/broadinstitute/gatk/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/broadinstitute/gatk/teams","hooks_url":"https://api.github.com/repos/broadinstitute/gatk/hooks","issue_events_url":"https://api.github.com/repos/broadinstitute/gatk/issues/events{/number}","events_url":"https://api.github.com/repos/broadinstitute/gatk/events","assignees_url":"https://api.github.com/repos/broadinstitute/gatk/assignees{/user}","branches_url":"https://api.github.com/repos/broadinstitute/gatk/branches{/branch}","tags_url":"https://api.github.com/repos/broadinstitute/gatk/tags","blobs_url":"https://api.github.com/repos/broadinstitute/gatk/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/broadinstitute/gatk/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/broadinstitute/gatk/git/refs{/sha}","trees_url":"https://api.github.com/repos/broadinstitute/gatk/git/trees{/sha}","statuses_url":"https://api.github.com/repos/broadinstitute/gatk/statuses/{sha}","languages_url":"https://api.github.com/repos/broadinstitute/gatk/languages","stargazers_url":"https://api.github.com/repos/broadinstitute/gatk/stargazers","contributors_url":"https://api.github.com/repos/broadinstitute/gatk/contributors","subscribers_url":"https://api.github.com/repos/broadinstitute/gatk/subscribers","subscription_url":"https://api.github.com/repos/broadinstitute/gatk/subscription","commits_url":"https://api.github.com/repos/broadinstitute/gatk/commits{/sha}","git_commits_url":"https://api.github.com/repos/broadinstitute/gatk/git/commits{/sha}","comments_url":"https://api.github.com/repos/broadinstitute/gatk/comments{/number}","issue_comment_url":"https://api.github.com/repos/broadinstitute/gatk/issues/comments{/number}","contents_url":"https://api.github.com/repos/broadinstitute/gatk/contents/{+path}","compare_url":"https://api.github.com/repos/broadinstitute/gatk/compare/{base}...{head}","merges_url":"https://api.github.com/repos/broadinstitute/gatk/merges","archive_url":"https://api.github.com/repos/broadinstitute/gatk/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/broadinstitute/gatk/downloads","issues_url":"https://api.github.com/repos/broadinstitute/gatk/issues{/number}","pulls_url":"https://api.github.com/repos/broadinstitute/gatk/pulls{/number}","milestones_url":"https://api.github.com/repos/broadinstitute/gatk/milestones{/number}","notifications_url":"https://api.github.com/repos/broadinstitute/gatk/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/broadinstitute/gatk/labels{/name}","releases_url":"https://api.github.com/repos/broadinstitute/gatk/releases{/id}","deployments_url":"https://api.github.com/repos/broadinstitute/gatk/deployments","created_at":"2014-12-02T20:50:36Z","updated_at":"2016-05-25T16:03:17Z","pushed_at":"2016-06-06T15:52:50Z","git_url":"git://github.com/broadinstitute/gatk.git","ssh_url":"git@github.com:broadinstitute/gatk.git","clone_url":"https://github.com/broadinstitute/gatk.git","svn_url":"https://github.com/broadinstitute/gatk","homepage":"","size":112434,"stargazers_count":71,"watchers_count":71,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":28,"mirror_url":null,"open_issues_count":364,"forks":28,"open_issues":364,"watchers":71,"default_branch":"master"}},"base":{"label":"broadinstitute:master","ref":"master","sha":"0a41ad410dc1db564b5607c4a544a6b36df9a2ca","user":{"login":"broadinstitute","id":393552,"avatar_url":"https://avatars.githubusercontent.com/u/393552?v=3","gravatar_id":"","url":"https://api.github.com/users/broadinstitute","html_url":"https://github.com/broadinstitute","followers_url":"https://api.github.com/users/broadinstitute/followers","following_url":"https://api.github.com/users/broadinstitute/following{/other_user}","gists_url":"https://api.github.com/users/broadinstitute/gists{/gist_id}","starred_url":"https://api.github.com/users/broadinstitute/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/broadinstitute/subscriptions","organizations_url":"https://api.github.com/users/broadinstitute/orgs","repos_url":"https://api.github.com/users/broadinstitute/repos","events_url":"https://api.github.com/users/broadinstitute/events{/privacy}","received_events_url":"https://api.github.com/users/broadinstitute/received_events","type":"Organization","site_admin":false},"repo":{"id":27452807,"name":"gatk","full_name":"broadinstitute/gatk","owner":{"login":"broadinstitute","id":393552,"avatar_url":"https://avatars.githubusercontent.com/u/393552?v=3","gravatar_id":"","url":"https://api.github.com/users/broadinstitute","html_url":"https://github.com/broadinstitute","followers_url":"https://api.github.com/users/broadinstitute/followers","following_url":"https://api.github.com/users/broadinstitute/following{/other_user}","gists_url":"https://api.github.com/users/broadinstitute/gists{/gist_id}","starred_url":"https://api.github.com/users/broadinstitute/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/broadinstitute/subscriptions","organizations_url":"https://api.github.com/users/broadinstitute/orgs","repos_url":"https://api.github.com/users/broadinstitute/repos","events_url":"https://api.github.com/users/broadinstitute/events{/privacy}","received_events_url":"https://api.github.com/users/broadinstitute/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/broadinstitute/gatk","description":"GATK4 development","fork":false,"url":"https://api.github.com/repos/broadinstitute/gatk","forks_url":"https://api.github.com/repos/broadinstitute/gatk/forks","keys_url":"https://api.github.com/repos/broadinstitute/gatk/keys{/key_id}","collaborators_url":"https://api.github.com/repos/broadinstitute/gatk/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/broadinstitute/gatk/teams","hooks_url":"https://api.github.com/repos/broadinstitute/gatk/hooks","issue_events_url":"https://api.github.com/repos/broadinstitute/gatk/issues/events{/number}","events_url":"https://api.github.com/repos/broadinstitute/gatk/events","assignees_url":"https://api.github.com/repos/broadinstitute/gatk/assignees{/user}","branches_url":"https://api.github.com/repos/broadinstitute/gatk/branches{/branch}","tags_url":"https://api.github.com/repos/broadinstitute/gatk/tags","blobs_url":"https://api.github.com/repos/broadinstitute/gatk/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/broadinstitute/gatk/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/broadinstitute/gatk/git/refs{/sha}","trees_url":"https://api.github.com/repos/broadinstitute/gatk/git/trees{/sha}","statuses_url":"https://api.github.com/repos/broadinstitute/gatk/statuses/{sha}","languages_url":"https://api.github.com/repos/broadinstitute/gatk/languages","stargazers_url":"https://api.github.com/repos/broadinstitute/gatk/stargazers","contributors_url":"https://api.github.com/repos/broadinstitute/gatk/contributors","subscribers_url":"https://api.github.com/repos/broadinstitute/gatk/subscribers","subscription_url":"https://api.github.com/repos/broadinstitute/gatk/subscription","commits_url":"https://api.github.com/repos/broadinstitute/gatk/commits{/sha}","git_commits_url":"https://api.github.com/repos/broadinstitute/gatk/git/commits{/sha}","comments_url":"https://api.github.com/repos/broadinstitute/gatk/comments{/number}","issue_comment_url":"https://api.github.com/repos/broadinstitute/gatk/issues/comments{/number}","contents_url":"https://api.github.com/repos/broadinstitute/gatk/contents/{+path}","compare_url":"https://api.github.com/repos/broadinstitute/gatk/compare/{base}...{head}","merges_url":"https://api.github.com/repos/broadinstitute/gatk/merges","archive_url":"https://api.github.com/repos/broadinstitute/gatk/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/broadinstitute/gatk/downloads","issues_url":"https://api.github.com/repos/broadinstitute/gatk/issues{/number}","pulls_url":"https://api.github.com/repos/broadinstitute/gatk/pulls{/number}","milestones_url":"https://api.github.com/repos/broadinstitute/gatk/milestones{/number}","notifications_url":"https://api.github.com/repos/broadinstitute/gatk/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/broadinstitute/gatk/labels{/name}","releases_url":"https://api.github.com/repos/broadinstitute/gatk/releases{/id}","deployments_url":"https://api.github.com/repos/broadinstitute/gatk/deployments","created_at":"2014-12-02T20:50:36Z","updated_at":"2016-05-25T16:03:17Z","pushed_at":"2016-06-06T15:52:50Z","git_url":"git://github.com/broadinstitute/gatk.git","ssh_url":"git@github.com:broadinstitute/gatk.git","clone_url":"https://github.com/broadinstitute/gatk.git","svn_url":"https://github.com/broadinstitute/gatk","homepage":"","size":112434,"stargazers_count":71,"watchers_count":71,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":28,"mirror_url":null,"open_issues_count":364,"forks":28,"open_issues":364,"watchers":71,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/broadinstitute/gatk/pulls/1840"},"html":{"href":"https://github.com/broadinstitute/gatk/pull/1840"},"issue":{"href":"https://api.github.com/repos/broadinstitute/gatk/issues/1840"},"comments":{"href":"https://api.github.com/repos/broadinstitute/gatk/issues/1840/comments"},"review_comments":{"href":"https://api.github.com/repos/broadinstitute/gatk/pulls/1840/comments"},"review_comment":{"href":"https://api.github.com/repos/broadinstitute/gatk/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/broadinstitute/gatk/pulls/1840/commits"},"statuses":{"href":"https://api.github.com/repos/broadinstitute/gatk/statuses/45ac05c9421e7abd2541e6e0f3042b900f6056d7"}}}}
{"actor":{"display_login":"akiezun"}}