{"action":"created","comment":{"url":"https://api.github.com/repos/fulcrumgenomics/fgbio/pulls/comments/70191543","id":70191543,"diff_hunk":"@@ -0,0 +1,413 @@\n+/*\n+ * The MIT License\n+ *\n+ * Copyright (c) 2016 Fulcrum Genomics\n+ *\n+ * Permission is hereby granted, free of charge, to any person obtaining a copy\n+ * of this software and associated documentation files (the \"Software\"), to deal\n+ * in the Software without restriction, including without limitation the rights\n+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n+ * copies of the Software, and to permit persons to whom the Software is\n+ * furnished to do so, subject to the following conditions:\n+ *\n+ * The above copyright notice and this permission notice shall be included in\n+ * all copies or substantial portions of the Software.\n+ *\n+ * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n+ * THE SOFTWARE.\n+ *\n+ */\n+\n+package com.fulcrumgenomics.phasing\n+\n+import java.util\n+import java.util.NoSuchElementException\n+\n+import com.fulcrumgenomics.cmdline.{ClpGroups, FgBioTool}\n+import dagr.commons.CommonsDef._\n+import dagr.commons.io.Io\n+import dagr.commons.util.LazyLogging\n+import dagr.sopt._\n+import htsjdk.samtools.util.CloserUtil\n+import htsjdk.variant.variantcontext._\n+import htsjdk.variant.variantcontext.writer.{Options, VariantContextWriter, VariantContextWriterBuilder}\n+import htsjdk.variant.vcf._\n+\n+import scala.collection.JavaConversions._\n+import scala.collection.JavaConverters._\n+\n+@clp(\n+  description =\n+    \"\"\"\n+      |Converts the output of HapCut to a VCF.\n+      |\n+      |The output of HAPCUT does not include all input variants, but simply those variants that are in phased blocks.\n+      |This tool takes the original VCF and the output of HapCut, and produces two VCFs: (1) a VCF containing variants\n+      |that were phased, and (2) a VCF containing variants that were not phased, such that all variants in the original\n+      |file are in one of two output VCFs.\n+      |\n+      |The VCF with phased variants will have the first variant of a haplotype block with a genotype \"M\\F\", while the\n+      |subsequent variants in that block having \"M|F\" as their genotype.  This first variant in a block can optionally\n+      |have \"M|F\".\n+      |\n+    \"\"\",\n+  group=ClpGroups.Phasing\n+)\n+class HapCutToVcf\n+( @arg(flag=\"v\", doc=\"The original VCF provided to HAPCUT.\") val vcf: PathToVcf,\n+  @arg(flag=\"i\", doc=\"The output file from HAPCUT.\") val input: FilePath,\n+  @arg(flag=\"o\", doc=\"The output VCF with variants that were phased by HAPCUT.\") val output: PathToVcf,\n+  @arg(flag=\"u\", doc=\"The output VCF with variants that were not phased by HAPCUT.\") val unphasedOutput: PathToVcf,\n+  @arg(flag=\"m\", doc=\"Allow missing fields in the VCF header.\") val allowMissingFieldsInVcfHeader: Boolean = true,\n+  @arg(flag=\"r\", doc=\"The first variant context in a block should have '/' instead of '|'\") val readBackedPhasingFormat: Boolean = true\n+) extends FgBioTool with LazyLogging {\n+  Io.assertReadable(vcf)\n+  Io.assertReadable(input)\n+  Io.assertCanWriteFile(output)\n+\n+  override def execute(): Unit = {\n+    val vcfReader      = new VCFFileReader(vcf.toFile, false)\n+    val phasedWriter   = makeWriter(output, vcfReader, addPhasedHeaderLines=true)\n+    val unphasedWriter = makeWriter(unphasedOutput, vcfReader, addPhasedHeaderLines=false)\n+\n+    val iterator = new MergingIterator(input, vcfReader, readBackedPhasingFormat)\n+    iterator.foreach {\n+      case Left(ctx)  => phasedWriter.add(ctx)\n+      case Right(ctx) => unphasedWriter.add(ctx)\n+    }\n+\n+    CloserUtil.close(vcfReader)\n+    phasedWriter.close()\n+    unphasedWriter.close()\n+  }\n+\n+  /** Creates a VCF writer, adding extra header lines if the output is the phased VCF. */\n+  private def makeWriter(path: PathToVcf, vcfReader: VCFFileReader, addPhasedHeaderLines: Boolean): VariantContextWriter = {\n+    val inputHeader = vcfReader.getFileHeader\n+\n+    val builder = new VariantContextWriterBuilder()\n+      .setOutputFile(path.toFile)\n+      .setReferenceDictionary(inputHeader.getSequenceDictionary)\n+      .setOption(Options.INDEX_ON_THE_FLY)\n+      .modifyOption(Options.ALLOW_MISSING_FIELDS_IN_HEADER, allowMissingFieldsInVcfHeader)\n+    val writer: VariantContextWriter = builder.build\n+\n+    val outHeader = if (addPhasedHeaderLines) {\n+      // get the header lines to skip\n+      val headerLinesToSkip = HapCutCallGenotypeInfo.formatHeaderKeys\n+        .filter { key => inputHeader.hasFormatLine(key) }\n+        .map { key => inputHeader.getFormatHeaderLine(key) }\n+      // get all the header lines from the input\n+      val headerLines: util.Set[VCFHeaderLine] = new util.HashSet[VCFHeaderLine](\n+        inputHeader.getMetaDataInSortedOrder.filter { line =>\n+          if (headerLinesToSkip.contains(line)) {\n+            logger.debug(s\"Will overwrite header line: '${line.toString}\")\n+            false\n+          }\n+          else true\n+        }.toSet\n+      )\n+      // add standard header lines\n+      VCFStandardHeaderLines.addStandardFormatLines(headerLines, false, Genotype.PRIMARY_KEYS)\n+      // create the header\n+      val header: VCFHeader = new VCFHeader(headerLines, inputHeader.getSampleNamesInOrder)\n+      // add the new header lines\n+      HapCutCallGenotypeInfo.formatHeaderLines.foreach(header.addMetaDataLine)\n+      header\n+    }\n+    else {\n+      inputHeader\n+    }\n+    writer.writeHeader(outHeader)\n+    writer\n+  }\n+}\n+\n+/** An iterator over all variants in the provided VCFFileReader.  The `input` is the output of HapCut.\n+  *\n+  * If the variant in the VCFFileReader was not phased by HapCut, then we will return Right(VariantContext).  If the\n+  * variant was phased by HapCut, we will return Left(VariantContext).\n+  */\n+private class MergingIterator(input: FilePath, vcfReader: VCFFileReader, readBackedPhasingFormat: Boolean) extends Iterator[Either[VariantContext,VariantContext]] {\n+\n+  private val sourceIterator = vcfReader.toStream.map { ctx =>\n+    // NB: unsets the phase in case it was already set\n+    new VariantContextBuilder(ctx).genotypes(new GenotypeBuilder(ctx.getGenotype(0)).phased(false).make()).make()\n+  }.zipWithIndex.iterator\n+  private val hapCutIterator = new HapCutReader(input)\n+  private val sampleName = vcfReader.getFileHeader.getSampleNamesInOrder.head\n+\n+  def hasNext(): Boolean = sourceIterator.hasNext\n+\n+  /** Returns either the phased variant with added HapCut-specific genotype information (Left), or the original variant (Right). */\n+  def next(): Either[VariantContext,VariantContext] = {\n+    if (!hasNext()) throw new NoSuchElementException(\"Calling next() when hasNext() is false\")\n+    val (sourceContext, sourceOffset) = sourceIterator.next()\n+    if (!hapCutIterator.hasNext()) {\n+      Right(sourceContext)\n+    }\n+    else {\n+      hapCutIterator.next() match {\n+        case None => Right(sourceContext)\n+        case Some(hapCutCall) =>\n+          if (hapCutCall.offset != sourceOffset+1) throw new IllegalStateException(\"BUG: calls are out of order\")\n+          val hapCutContext = HapCutCall.toVariantContext(hapCutCall, sampleName)\n+          Left(replaceGenotypes(source = sourceContext, genotype = hapCutContext.getGenotype(0), isPhased = !readBackedPhasingFormat || !hapCutCall.firstInBlock))\n+      }\n+    }\n+  }\n+\n+  /** Replaces the original genotype with HapCut's genotype and adds any HapCut-specific genotype information. */\n+  private def replaceGenotypes(source: VariantContext, genotype: Genotype, isPhased: Boolean): VariantContext = {\n+    val builder = new VariantContextBuilder(source)\n+    val sourceAlleles = source.getAlleles.toSeq\n+    val genotypeAlleles = genotype.getAlleles.map {\n+      allele => sourceAlleles.find(a => a.toString == allele.toString) match {\n+        case None =>\n+          throw new IllegalStateException(s\"Could not find allele '$allele' in source alleles: \" + sourceAlleles.map{_.toString}.mkString(\", \"))\n+        case Some(a) => a\n+      }\n+    }\n+    val sourceGenotype = source.getGenotype(0)\n+    val genotypeBuilder = new GenotypeBuilder(sourceGenotype).alleles(genotypeAlleles).phased(isPhased)\n+    genotypeBuilder.attributes(genotype.getExtendedAttributes)\n+    builder.genotypes(genotypeBuilder.make()).make()\n+  }\n+}\n+\n+/** Haplotype block information produced by HapCut.\n+  *\n+  * @param phaseSet the phase set identifier for this block (typically the position of the first variant).\n+  * @param offset the 1-based variant offset from the first variant given to HapCut.\n+  * @param len the total number of variants that this block spans, including unphased variants.\n+  * @param phased the total number of variants phased.\n+  * @param span the number of bases this block spans.\n+  * @param mecScore the minimum error correction (MEC) score.\n+  * @param fragments the number of fragments contributing to variants in this block.\n+  */\n+private class HapCutBlockInfo private(var phaseSet: Int, val offset: Int, val len: Int, val phased: Int, val span: Int, val mecScore: Float, val fragments: Int)\n+\n+private object HapCutBlockInfo {\n+  val BlockLinePattern = \"\"\"^BLOCK: offset: (\\d+) len: (\\d+) phased: (\\d+) SPAN: (\\d+) MECscore (\\d+.\\d+) fragments (\\d+)$\"\"\".r\n+\n+  def apply(blockLine: String, phaseSet: Int): HapCutBlockInfo = {\n+    BlockLinePattern findFirstMatchIn blockLine match {","path":"src/main/scala/com/fulcrumgenomics/phasing/HapCutToVcf.scala","position":199,"original_position":199,"commit_id":"e8961a6dd231dc1b63c69ccd1eec7ae2b3a18b78","original_commit_id":"e8961a6dd231dc1b63c69ccd1eec7ae2b3a18b78","user":{"login":"nh13","id":846274,"avatar_url":"https://avatars.githubusercontent.com/u/846274?v=3","gravatar_id":"","url":"https://api.github.com/users/nh13","html_url":"https://github.com/nh13","followers_url":"https://api.github.com/users/nh13/followers","following_url":"https://api.github.com/users/nh13/following{/other_user}","gists_url":"https://api.github.com/users/nh13/gists{/gist_id}","starred_url":"https://api.github.com/users/nh13/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nh13/subscriptions","organizations_url":"https://api.github.com/users/nh13/orgs","repos_url":"https://api.github.com/users/nh13/repos","events_url":"https://api.github.com/users/nh13/events{/privacy}","received_events_url":"https://api.github.com/users/nh13/received_events","type":"User","site_admin":false},"body":"Done.","created_at":"2016-07-11T00:27:20Z","updated_at":"2016-07-11T00:27:20Z","html_url":"https://github.com/fulcrumgenomics/fgbio/pull/44#discussion_r70191543","pull_request_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/pulls/44","_links":{"self":{"href":"https://api.github.com/repos/fulcrumgenomics/fgbio/pulls/comments/70191543"},"html":{"href":"https://github.com/fulcrumgenomics/fgbio/pull/44#discussion_r70191543"},"pull_request":{"href":"https://api.github.com/repos/fulcrumgenomics/fgbio/pulls/44"}}},"pull_request":{"url":"https://api.github.com/repos/fulcrumgenomics/fgbio/pulls/44","id":75922393,"html_url":"https://github.com/fulcrumgenomics/fgbio/pull/44","diff_url":"https://github.com/fulcrumgenomics/fgbio/pull/44.diff","patch_url":"https://github.com/fulcrumgenomics/fgbio/pull/44.patch","issue_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/issues/44","number":44,"state":"open","locked":false,"title":"Adding a tool HapCutToVcf.","user":{"login":"nh13","id":846274,"avatar_url":"https://avatars.githubusercontent.com/u/846274?v=3","gravatar_id":"","url":"https://api.github.com/users/nh13","html_url":"https://github.com/nh13","followers_url":"https://api.github.com/users/nh13/followers","following_url":"https://api.github.com/users/nh13/following{/other_user}","gists_url":"https://api.github.com/users/nh13/gists{/gist_id}","starred_url":"https://api.github.com/users/nh13/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nh13/subscriptions","organizations_url":"https://api.github.com/users/nh13/orgs","repos_url":"https://api.github.com/users/nh13/repos","events_url":"https://api.github.com/users/nh13/events{/privacy}","received_events_url":"https://api.github.com/users/nh13/received_events","type":"User","site_admin":false},"body":"This tool will convert the output of HapCut to a valid VCF, in a similar\r\nfashion to how Picard's MergeBamAlignment post-processes the output of\r\nan aligner.","created_at":"2016-07-01T03:22:10Z","updated_at":"2016-07-11T00:27:20Z","closed_at":null,"merged_at":null,"merge_commit_sha":"0de6d512d8692a869891ef4f3508f84fb0c30660","assignee":{"login":"nh13","id":846274,"avatar_url":"https://avatars.githubusercontent.com/u/846274?v=3","gravatar_id":"","url":"https://api.github.com/users/nh13","html_url":"https://github.com/nh13","followers_url":"https://api.github.com/users/nh13/followers","following_url":"https://api.github.com/users/nh13/following{/other_user}","gists_url":"https://api.github.com/users/nh13/gists{/gist_id}","starred_url":"https://api.github.com/users/nh13/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nh13/subscriptions","organizations_url":"https://api.github.com/users/nh13/orgs","repos_url":"https://api.github.com/users/nh13/repos","events_url":"https://api.github.com/users/nh13/events{/privacy}","received_events_url":"https://api.github.com/users/nh13/received_events","type":"User","site_admin":false},"assignees":[{"login":"nh13","id":846274,"avatar_url":"https://avatars.githubusercontent.com/u/846274?v=3","gravatar_id":"","url":"https://api.github.com/users/nh13","html_url":"https://github.com/nh13","followers_url":"https://api.github.com/users/nh13/followers","following_url":"https://api.github.com/users/nh13/following{/other_user}","gists_url":"https://api.github.com/users/nh13/gists{/gist_id}","starred_url":"https://api.github.com/users/nh13/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nh13/subscriptions","organizations_url":"https://api.github.com/users/nh13/orgs","repos_url":"https://api.github.com/users/nh13/repos","events_url":"https://api.github.com/users/nh13/events{/privacy}","received_events_url":"https://api.github.com/users/nh13/received_events","type":"User","site_admin":false}],"milestone":null,"commits_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/pulls/44/commits","review_comments_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/pulls/44/comments","review_comment_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/pulls/comments{/number}","comments_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/issues/44/comments","statuses_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/statuses/e8961a6dd231dc1b63c69ccd1eec7ae2b3a18b78","head":{"label":"fulcrumgenomics:nh_hapcut","ref":"nh_hapcut","sha":"e8961a6dd231dc1b63c69ccd1eec7ae2b3a18b78","user":{"login":"fulcrumgenomics","id":13546013,"avatar_url":"https://avatars.githubusercontent.com/u/13546013?v=3","gravatar_id":"","url":"https://api.github.com/users/fulcrumgenomics","html_url":"https://github.com/fulcrumgenomics","followers_url":"https://api.github.com/users/fulcrumgenomics/followers","following_url":"https://api.github.com/users/fulcrumgenomics/following{/other_user}","gists_url":"https://api.github.com/users/fulcrumgenomics/gists{/gist_id}","starred_url":"https://api.github.com/users/fulcrumgenomics/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fulcrumgenomics/subscriptions","organizations_url":"https://api.github.com/users/fulcrumgenomics/orgs","repos_url":"https://api.github.com/users/fulcrumgenomics/repos","events_url":"https://api.github.com/users/fulcrumgenomics/events{/privacy}","received_events_url":"https://api.github.com/users/fulcrumgenomics/received_events","type":"Organization","site_admin":false},"repo":{"id":53011104,"name":"fgbio","full_name":"fulcrumgenomics/fgbio","owner":{"login":"fulcrumgenomics","id":13546013,"avatar_url":"https://avatars.githubusercontent.com/u/13546013?v=3","gravatar_id":"","url":"https://api.github.com/users/fulcrumgenomics","html_url":"https://github.com/fulcrumgenomics","followers_url":"https://api.github.com/users/fulcrumgenomics/followers","following_url":"https://api.github.com/users/fulcrumgenomics/following{/other_user}","gists_url":"https://api.github.com/users/fulcrumgenomics/gists{/gist_id}","starred_url":"https://api.github.com/users/fulcrumgenomics/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fulcrumgenomics/subscriptions","organizations_url":"https://api.github.com/users/fulcrumgenomics/orgs","repos_url":"https://api.github.com/users/fulcrumgenomics/repos","events_url":"https://api.github.com/users/fulcrumgenomics/events{/privacy}","received_events_url":"https://api.github.com/users/fulcrumgenomics/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/fulcrumgenomics/fgbio","description":"A set of tools for working with genomic and high throughput sequencing data.","fork":false,"url":"https://api.github.com/repos/fulcrumgenomics/fgbio","forks_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/forks","keys_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/keys{/key_id}","collaborators_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/teams","hooks_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/hooks","issue_events_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/issues/events{/number}","events_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/events","assignees_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/assignees{/user}","branches_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/branches{/branch}","tags_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/tags","blobs_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/git/refs{/sha}","trees_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/git/trees{/sha}","statuses_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/statuses/{sha}","languages_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/languages","stargazers_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/stargazers","contributors_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/contributors","subscribers_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/subscribers","subscription_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/subscription","commits_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/commits{/sha}","git_commits_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/git/commits{/sha}","comments_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/comments{/number}","issue_comment_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/issues/comments{/number}","contents_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/contents/{+path}","compare_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/compare/{base}...{head}","merges_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/merges","archive_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/downloads","issues_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/issues{/number}","pulls_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/pulls{/number}","milestones_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/milestones{/number}","notifications_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/labels{/name}","releases_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/releases{/id}","deployments_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/deployments","created_at":"2016-03-03T01:44:56Z","updated_at":"2016-07-08T18:24:48Z","pushed_at":"2016-07-10T01:53:16Z","git_url":"git://github.com/fulcrumgenomics/fgbio.git","ssh_url":"git@github.com:fulcrumgenomics/fgbio.git","clone_url":"https://github.com/fulcrumgenomics/fgbio.git","svn_url":"https://github.com/fulcrumgenomics/fgbio","homepage":"","size":6510,"stargazers_count":3,"watchers_count":3,"language":"Scala","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":13,"forks":0,"open_issues":13,"watchers":3,"default_branch":"master"}},"base":{"label":"fulcrumgenomics:master","ref":"master","sha":"89dcfd9f055506d04270b53132d00a6c4fe0a685","user":{"login":"fulcrumgenomics","id":13546013,"avatar_url":"https://avatars.githubusercontent.com/u/13546013?v=3","gravatar_id":"","url":"https://api.github.com/users/fulcrumgenomics","html_url":"https://github.com/fulcrumgenomics","followers_url":"https://api.github.com/users/fulcrumgenomics/followers","following_url":"https://api.github.com/users/fulcrumgenomics/following{/other_user}","gists_url":"https://api.github.com/users/fulcrumgenomics/gists{/gist_id}","starred_url":"https://api.github.com/users/fulcrumgenomics/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fulcrumgenomics/subscriptions","organizations_url":"https://api.github.com/users/fulcrumgenomics/orgs","repos_url":"https://api.github.com/users/fulcrumgenomics/repos","events_url":"https://api.github.com/users/fulcrumgenomics/events{/privacy}","received_events_url":"https://api.github.com/users/fulcrumgenomics/received_events","type":"Organization","site_admin":false},"repo":{"id":53011104,"name":"fgbio","full_name":"fulcrumgenomics/fgbio","owner":{"login":"fulcrumgenomics","id":13546013,"avatar_url":"https://avatars.githubusercontent.com/u/13546013?v=3","gravatar_id":"","url":"https://api.github.com/users/fulcrumgenomics","html_url":"https://github.com/fulcrumgenomics","followers_url":"https://api.github.com/users/fulcrumgenomics/followers","following_url":"https://api.github.com/users/fulcrumgenomics/following{/other_user}","gists_url":"https://api.github.com/users/fulcrumgenomics/gists{/gist_id}","starred_url":"https://api.github.com/users/fulcrumgenomics/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fulcrumgenomics/subscriptions","organizations_url":"https://api.github.com/users/fulcrumgenomics/orgs","repos_url":"https://api.github.com/users/fulcrumgenomics/repos","events_url":"https://api.github.com/users/fulcrumgenomics/events{/privacy}","received_events_url":"https://api.github.com/users/fulcrumgenomics/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/fulcrumgenomics/fgbio","description":"A set of tools for working with genomic and high throughput sequencing data.","fork":false,"url":"https://api.github.com/repos/fulcrumgenomics/fgbio","forks_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/forks","keys_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/keys{/key_id}","collaborators_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/teams","hooks_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/hooks","issue_events_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/issues/events{/number}","events_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/events","assignees_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/assignees{/user}","branches_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/branches{/branch}","tags_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/tags","blobs_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/git/refs{/sha}","trees_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/git/trees{/sha}","statuses_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/statuses/{sha}","languages_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/languages","stargazers_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/stargazers","contributors_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/contributors","subscribers_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/subscribers","subscription_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/subscription","commits_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/commits{/sha}","git_commits_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/git/commits{/sha}","comments_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/comments{/number}","issue_comment_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/issues/comments{/number}","contents_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/contents/{+path}","compare_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/compare/{base}...{head}","merges_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/merges","archive_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/downloads","issues_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/issues{/number}","pulls_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/pulls{/number}","milestones_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/milestones{/number}","notifications_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/labels{/name}","releases_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/releases{/id}","deployments_url":"https://api.github.com/repos/fulcrumgenomics/fgbio/deployments","created_at":"2016-03-03T01:44:56Z","updated_at":"2016-07-08T18:24:48Z","pushed_at":"2016-07-10T01:53:16Z","git_url":"git://github.com/fulcrumgenomics/fgbio.git","ssh_url":"git@github.com:fulcrumgenomics/fgbio.git","clone_url":"https://github.com/fulcrumgenomics/fgbio.git","svn_url":"https://github.com/fulcrumgenomics/fgbio","homepage":"","size":6510,"stargazers_count":3,"watchers_count":3,"language":"Scala","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":13,"forks":0,"open_issues":13,"watchers":3,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/fulcrumgenomics/fgbio/pulls/44"},"html":{"href":"https://github.com/fulcrumgenomics/fgbio/pull/44"},"issue":{"href":"https://api.github.com/repos/fulcrumgenomics/fgbio/issues/44"},"comments":{"href":"https://api.github.com/repos/fulcrumgenomics/fgbio/issues/44/comments"},"review_comments":{"href":"https://api.github.com/repos/fulcrumgenomics/fgbio/pulls/44/comments"},"review_comment":{"href":"https://api.github.com/repos/fulcrumgenomics/fgbio/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/fulcrumgenomics/fgbio/pulls/44/commits"},"statuses":{"href":"https://api.github.com/repos/fulcrumgenomics/fgbio/statuses/e8961a6dd231dc1b63c69ccd1eec7ae2b3a18b78"}}}}
{"actor":{"display_login":"nh13"}}