miga-base 0.7.26.0 → 1.0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (337) hide show
  1. checksums.yaml +4 -4
  2. data/lib/miga/_data/aai-intax.blast.tsv.gz +0 -0
  3. data/lib/miga/_data/aai-intax.diamond.tsv.gz +0 -0
  4. data/lib/miga/_data/aai-novel.blast.tsv.gz +0 -0
  5. data/lib/miga/_data/aai-novel.diamond.tsv.gz +0 -0
  6. data/lib/miga/cli/action/classify_wf.rb +2 -2
  7. data/lib/miga/cli/action/derep_wf.rb +1 -1
  8. data/lib/miga/cli/action/doctor.rb +57 -14
  9. data/lib/miga/cli/action/doctor/base.rb +47 -23
  10. data/lib/miga/cli/action/init.rb +11 -7
  11. data/lib/miga/cli/action/init/files_helper.rb +1 -0
  12. data/lib/miga/cli/action/ncbi_get.rb +3 -3
  13. data/lib/miga/cli/action/tax_dist.rb +2 -2
  14. data/lib/miga/cli/action/wf.rb +5 -4
  15. data/lib/miga/common.rb +1 -0
  16. data/lib/miga/daemon.rb +11 -4
  17. data/lib/miga/dataset/result.rb +10 -6
  18. data/lib/miga/json.rb +5 -4
  19. data/lib/miga/metadata.rb +5 -1
  20. data/lib/miga/parallel.rb +36 -0
  21. data/lib/miga/project.rb +8 -8
  22. data/lib/miga/project/base.rb +4 -4
  23. data/lib/miga/project/result.rb +2 -2
  24. data/lib/miga/sqlite.rb +10 -2
  25. data/lib/miga/version.rb +23 -9
  26. data/scripts/aai_distances.bash +16 -18
  27. data/scripts/ani_distances.bash +16 -17
  28. data/scripts/assembly.bash +31 -16
  29. data/scripts/haai_distances.bash +3 -27
  30. data/scripts/miga.bash +6 -4
  31. data/scripts/p.bash +1 -1
  32. data/scripts/read_quality.bash +9 -18
  33. data/scripts/trimmed_fasta.bash +14 -30
  34. data/scripts/trimmed_reads.bash +36 -36
  35. data/test/parallel_test.rb +31 -0
  36. data/test/project_test.rb +2 -1
  37. data/test/remote_dataset_test.rb +1 -1
  38. data/utils/FastAAI/00.Libraries/01.SCG_HMMs/Archaea_SCG.hmm +41964 -0
  39. data/utils/FastAAI/00.Libraries/01.SCG_HMMs/Bacteria_SCG.hmm +32439 -0
  40. data/utils/FastAAI/00.Libraries/01.SCG_HMMs/Complete_SCG_DB.hmm +62056 -0
  41. data/utils/FastAAI/FastAAI/FastAAI +1336 -0
  42. data/utils/FastAAI/README.md +84 -0
  43. data/utils/FastAAI/kAAI_v1.0_virus.py +1296 -0
  44. data/utils/distance/commands.rb +1 -0
  45. data/utils/distance/database.rb +0 -1
  46. data/utils/distance/runner.rb +2 -4
  47. data/utils/enveomics/Docs/recplot2.md +244 -0
  48. data/utils/enveomics/Examples/aai-matrix.bash +66 -0
  49. data/utils/enveomics/Examples/ani-matrix.bash +66 -0
  50. data/utils/enveomics/Examples/essential-phylogeny.bash +105 -0
  51. data/utils/enveomics/Examples/unus-genome-phylogeny.bash +100 -0
  52. data/utils/enveomics/LICENSE.txt +73 -0
  53. data/utils/enveomics/Makefile +52 -0
  54. data/utils/enveomics/Manifest/Tasks/aasubs.json +103 -0
  55. data/utils/enveomics/Manifest/Tasks/blasttab.json +786 -0
  56. data/utils/enveomics/Manifest/Tasks/distances.json +161 -0
  57. data/utils/enveomics/Manifest/Tasks/fasta.json +802 -0
  58. data/utils/enveomics/Manifest/Tasks/fastq.json +291 -0
  59. data/utils/enveomics/Manifest/Tasks/graphics.json +126 -0
  60. data/utils/enveomics/Manifest/Tasks/mapping.json +137 -0
  61. data/utils/enveomics/Manifest/Tasks/ogs.json +382 -0
  62. data/utils/enveomics/Manifest/Tasks/other.json +906 -0
  63. data/utils/enveomics/Manifest/Tasks/remote.json +355 -0
  64. data/utils/enveomics/Manifest/Tasks/sequence-identity.json +638 -0
  65. data/utils/enveomics/Manifest/Tasks/tables.json +308 -0
  66. data/utils/enveomics/Manifest/Tasks/trees.json +68 -0
  67. data/utils/enveomics/Manifest/Tasks/variants.json +111 -0
  68. data/utils/enveomics/Manifest/categories.json +165 -0
  69. data/utils/enveomics/Manifest/examples.json +154 -0
  70. data/utils/enveomics/Manifest/tasks.json +4 -0
  71. data/utils/enveomics/Pipelines/assembly.pbs/CONFIG.mock.bash +69 -0
  72. data/utils/enveomics/Pipelines/assembly.pbs/FastA.N50.pl +1 -0
  73. data/utils/enveomics/Pipelines/assembly.pbs/FastA.filterN.pl +1 -0
  74. data/utils/enveomics/Pipelines/assembly.pbs/FastA.length.pl +1 -0
  75. data/utils/enveomics/Pipelines/assembly.pbs/README.md +189 -0
  76. data/utils/enveomics/Pipelines/assembly.pbs/RUNME-2.bash +112 -0
  77. data/utils/enveomics/Pipelines/assembly.pbs/RUNME-3.bash +23 -0
  78. data/utils/enveomics/Pipelines/assembly.pbs/RUNME-4.bash +44 -0
  79. data/utils/enveomics/Pipelines/assembly.pbs/RUNME.bash +50 -0
  80. data/utils/enveomics/Pipelines/assembly.pbs/kSelector.R +37 -0
  81. data/utils/enveomics/Pipelines/assembly.pbs/newbler.pbs +68 -0
  82. data/utils/enveomics/Pipelines/assembly.pbs/newbler_preparator.pl +49 -0
  83. data/utils/enveomics/Pipelines/assembly.pbs/soap.pbs +80 -0
  84. data/utils/enveomics/Pipelines/assembly.pbs/stats.pbs +57 -0
  85. data/utils/enveomics/Pipelines/assembly.pbs/velvet.pbs +63 -0
  86. data/utils/enveomics/Pipelines/blast.pbs/01.pbs.bash +38 -0
  87. data/utils/enveomics/Pipelines/blast.pbs/02.pbs.bash +73 -0
  88. data/utils/enveomics/Pipelines/blast.pbs/03.pbs.bash +21 -0
  89. data/utils/enveomics/Pipelines/blast.pbs/BlastTab.recover_job.pl +72 -0
  90. data/utils/enveomics/Pipelines/blast.pbs/CONFIG.mock.bash +98 -0
  91. data/utils/enveomics/Pipelines/blast.pbs/FastA.split.pl +1 -0
  92. data/utils/enveomics/Pipelines/blast.pbs/README.md +127 -0
  93. data/utils/enveomics/Pipelines/blast.pbs/RUNME.bash +109 -0
  94. data/utils/enveomics/Pipelines/blast.pbs/TASK.check.bash +128 -0
  95. data/utils/enveomics/Pipelines/blast.pbs/TASK.dry.bash +16 -0
  96. data/utils/enveomics/Pipelines/blast.pbs/TASK.eo.bash +22 -0
  97. data/utils/enveomics/Pipelines/blast.pbs/TASK.pause.bash +26 -0
  98. data/utils/enveomics/Pipelines/blast.pbs/TASK.run.bash +89 -0
  99. data/utils/enveomics/Pipelines/blast.pbs/sentinel.pbs.bash +29 -0
  100. data/utils/enveomics/Pipelines/idba.pbs/README.md +49 -0
  101. data/utils/enveomics/Pipelines/idba.pbs/RUNME.bash +95 -0
  102. data/utils/enveomics/Pipelines/idba.pbs/run.pbs +56 -0
  103. data/utils/enveomics/Pipelines/trim.pbs/README.md +54 -0
  104. data/utils/enveomics/Pipelines/trim.pbs/RUNME.bash +70 -0
  105. data/utils/enveomics/Pipelines/trim.pbs/run.pbs +130 -0
  106. data/utils/enveomics/README.md +42 -0
  107. data/utils/enveomics/Scripts/AAsubs.log2ratio.rb +171 -0
  108. data/utils/enveomics/Scripts/Aln.cat.rb +221 -0
  109. data/utils/enveomics/Scripts/Aln.convert.pl +35 -0
  110. data/utils/enveomics/Scripts/AlphaDiversity.pl +152 -0
  111. data/utils/enveomics/Scripts/BedGraph.tad.rb +93 -0
  112. data/utils/enveomics/Scripts/BedGraph.window.rb +71 -0
  113. data/utils/enveomics/Scripts/BlastPairwise.AAsubs.pl +102 -0
  114. data/utils/enveomics/Scripts/BlastTab.addlen.rb +63 -0
  115. data/utils/enveomics/Scripts/BlastTab.advance.bash +48 -0
  116. data/utils/enveomics/Scripts/BlastTab.best_hit_sorted.pl +55 -0
  117. data/utils/enveomics/Scripts/BlastTab.catsbj.pl +104 -0
  118. data/utils/enveomics/Scripts/BlastTab.cogCat.rb +76 -0
  119. data/utils/enveomics/Scripts/BlastTab.filter.pl +47 -0
  120. data/utils/enveomics/Scripts/BlastTab.kegg_pep2path_rest.pl +194 -0
  121. data/utils/enveomics/Scripts/BlastTab.metaxaPrep.pl +104 -0
  122. data/utils/enveomics/Scripts/BlastTab.pairedHits.rb +157 -0
  123. data/utils/enveomics/Scripts/BlastTab.recplot2.R +48 -0
  124. data/utils/enveomics/Scripts/BlastTab.seqdepth.pl +86 -0
  125. data/utils/enveomics/Scripts/BlastTab.seqdepth_ZIP.pl +119 -0
  126. data/utils/enveomics/Scripts/BlastTab.seqdepth_nomedian.pl +86 -0
  127. data/utils/enveomics/Scripts/BlastTab.subsample.pl +47 -0
  128. data/utils/enveomics/Scripts/BlastTab.sumPerHit.pl +114 -0
  129. data/utils/enveomics/Scripts/BlastTab.taxid2taxrank.pl +90 -0
  130. data/utils/enveomics/Scripts/BlastTab.topHits_sorted.rb +101 -0
  131. data/utils/enveomics/Scripts/Chao1.pl +97 -0
  132. data/utils/enveomics/Scripts/CharTable.classify.rb +234 -0
  133. data/utils/enveomics/Scripts/EBIseq2tax.rb +83 -0
  134. data/utils/enveomics/Scripts/FastA.N50.pl +60 -0
  135. data/utils/enveomics/Scripts/FastA.extract.rb +152 -0
  136. data/utils/enveomics/Scripts/FastA.filter.pl +52 -0
  137. data/utils/enveomics/Scripts/FastA.filterLen.pl +28 -0
  138. data/utils/enveomics/Scripts/FastA.filterN.pl +60 -0
  139. data/utils/enveomics/Scripts/FastA.fragment.rb +100 -0
  140. data/utils/enveomics/Scripts/FastA.gc.pl +42 -0
  141. data/utils/enveomics/Scripts/FastA.interpose.pl +93 -0
  142. data/utils/enveomics/Scripts/FastA.length.pl +38 -0
  143. data/utils/enveomics/Scripts/FastA.mask.rb +89 -0
  144. data/utils/enveomics/Scripts/FastA.per_file.pl +36 -0
  145. data/utils/enveomics/Scripts/FastA.qlen.pl +57 -0
  146. data/utils/enveomics/Scripts/FastA.rename.pl +65 -0
  147. data/utils/enveomics/Scripts/FastA.revcom.pl +23 -0
  148. data/utils/enveomics/Scripts/FastA.sample.rb +98 -0
  149. data/utils/enveomics/Scripts/FastA.slider.pl +85 -0
  150. data/utils/enveomics/Scripts/FastA.split.pl +55 -0
  151. data/utils/enveomics/Scripts/FastA.split.rb +79 -0
  152. data/utils/enveomics/Scripts/FastA.subsample.pl +131 -0
  153. data/utils/enveomics/Scripts/FastA.tag.rb +65 -0
  154. data/utils/enveomics/Scripts/FastA.toFastQ.rb +69 -0
  155. data/utils/enveomics/Scripts/FastA.wrap.rb +48 -0
  156. data/utils/enveomics/Scripts/FastQ.filter.pl +54 -0
  157. data/utils/enveomics/Scripts/FastQ.interpose.pl +90 -0
  158. data/utils/enveomics/Scripts/FastQ.maskQual.rb +89 -0
  159. data/utils/enveomics/Scripts/FastQ.offset.pl +90 -0
  160. data/utils/enveomics/Scripts/FastQ.split.pl +53 -0
  161. data/utils/enveomics/Scripts/FastQ.tag.rb +70 -0
  162. data/utils/enveomics/Scripts/FastQ.test-error.rb +81 -0
  163. data/utils/enveomics/Scripts/FastQ.toFastA.awk +24 -0
  164. data/utils/enveomics/Scripts/GFF.catsbj.pl +127 -0
  165. data/utils/enveomics/Scripts/GenBank.add_fields.rb +84 -0
  166. data/utils/enveomics/Scripts/HMM.essential.rb +351 -0
  167. data/utils/enveomics/Scripts/HMM.haai.rb +168 -0
  168. data/utils/enveomics/Scripts/HMMsearch.extractIds.rb +83 -0
  169. data/utils/enveomics/Scripts/JPlace.distances.rb +88 -0
  170. data/utils/enveomics/Scripts/JPlace.to_iToL.rb +320 -0
  171. data/utils/enveomics/Scripts/M5nr.getSequences.rb +81 -0
  172. data/utils/enveomics/Scripts/MeTaxa.distribution.pl +198 -0
  173. data/utils/enveomics/Scripts/MyTaxa.fragsByTax.pl +35 -0
  174. data/utils/enveomics/Scripts/MyTaxa.seq-taxrank.rb +49 -0
  175. data/utils/enveomics/Scripts/NCBIacc2tax.rb +92 -0
  176. data/utils/enveomics/Scripts/Newick.autoprune.R +27 -0
  177. data/utils/enveomics/Scripts/RAxML-EPA.to_iToL.pl +228 -0
  178. data/utils/enveomics/Scripts/RecPlot2.compareIdentities.R +32 -0
  179. data/utils/enveomics/Scripts/RefSeq.download.bash +48 -0
  180. data/utils/enveomics/Scripts/SRA.download.bash +55 -0
  181. data/utils/enveomics/Scripts/TRIBS.plot-test.R +36 -0
  182. data/utils/enveomics/Scripts/TRIBS.test.R +39 -0
  183. data/utils/enveomics/Scripts/Table.barplot.R +31 -0
  184. data/utils/enveomics/Scripts/Table.df2dist.R +30 -0
  185. data/utils/enveomics/Scripts/Table.filter.pl +61 -0
  186. data/utils/enveomics/Scripts/Table.merge.pl +77 -0
  187. data/utils/enveomics/Scripts/Table.prefScore.R +60 -0
  188. data/utils/enveomics/Scripts/Table.replace.rb +69 -0
  189. data/utils/enveomics/Scripts/Table.round.rb +63 -0
  190. data/utils/enveomics/Scripts/Table.split.pl +57 -0
  191. data/utils/enveomics/Scripts/Taxonomy.silva2ncbi.rb +227 -0
  192. data/utils/enveomics/Scripts/VCF.KaKs.rb +147 -0
  193. data/utils/enveomics/Scripts/VCF.SNPs.rb +88 -0
  194. data/utils/enveomics/Scripts/aai.rb +419 -0
  195. data/utils/enveomics/Scripts/ani.rb +362 -0
  196. data/utils/enveomics/Scripts/anir.rb +137 -0
  197. data/utils/enveomics/Scripts/clust.rand.rb +102 -0
  198. data/utils/enveomics/Scripts/gi2tax.rb +103 -0
  199. data/utils/enveomics/Scripts/in_silico_GA_GI.pl +96 -0
  200. data/utils/enveomics/Scripts/lib/data/dupont_2012_essential.hmm.gz +0 -0
  201. data/utils/enveomics/Scripts/lib/data/lee_2019_essential.hmm.gz +0 -0
  202. data/utils/enveomics/Scripts/lib/enveomics.R +1 -0
  203. data/utils/enveomics/Scripts/lib/enveomics_rb/anir.rb +293 -0
  204. data/utils/enveomics/Scripts/lib/enveomics_rb/bm_set.rb +175 -0
  205. data/utils/enveomics/Scripts/lib/enveomics_rb/enveomics.rb +24 -0
  206. data/utils/enveomics/Scripts/lib/enveomics_rb/errors.rb +17 -0
  207. data/utils/enveomics/Scripts/lib/enveomics_rb/gmm_em.rb +30 -0
  208. data/utils/enveomics/Scripts/lib/enveomics_rb/jplace.rb +253 -0
  209. data/utils/enveomics/Scripts/lib/enveomics_rb/match.rb +63 -0
  210. data/utils/enveomics/Scripts/lib/enveomics_rb/og.rb +182 -0
  211. data/utils/enveomics/Scripts/lib/enveomics_rb/rbm.rb +49 -0
  212. data/utils/enveomics/Scripts/lib/enveomics_rb/remote_data.rb +74 -0
  213. data/utils/enveomics/Scripts/lib/enveomics_rb/seq_range.rb +237 -0
  214. data/utils/enveomics/Scripts/lib/enveomics_rb/stats.rb +3 -0
  215. data/utils/enveomics/Scripts/lib/enveomics_rb/stats/rand.rb +31 -0
  216. data/utils/enveomics/Scripts/lib/enveomics_rb/stats/sample.rb +152 -0
  217. data/utils/enveomics/Scripts/lib/enveomics_rb/utils.rb +73 -0
  218. data/utils/enveomics/Scripts/lib/enveomics_rb/vcf.rb +135 -0
  219. data/utils/enveomics/Scripts/ogs.annotate.rb +88 -0
  220. data/utils/enveomics/Scripts/ogs.core-pan.rb +160 -0
  221. data/utils/enveomics/Scripts/ogs.extract.rb +125 -0
  222. data/utils/enveomics/Scripts/ogs.mcl.rb +186 -0
  223. data/utils/enveomics/Scripts/ogs.rb +104 -0
  224. data/utils/enveomics/Scripts/ogs.stats.rb +131 -0
  225. data/utils/enveomics/Scripts/rbm-legacy.rb +172 -0
  226. data/utils/enveomics/Scripts/rbm.rb +100 -0
  227. data/utils/enveomics/Scripts/sam.filter.rb +148 -0
  228. data/utils/enveomics/Tests/Makefile +10 -0
  229. data/utils/enveomics/Tests/Mgen_M2288.faa +3189 -0
  230. data/utils/enveomics/Tests/Mgen_M2288.fna +8282 -0
  231. data/utils/enveomics/Tests/Mgen_M2321.fna +8288 -0
  232. data/utils/enveomics/Tests/Nequ_Kin4M.faa +2970 -0
  233. data/utils/enveomics/Tests/Xanthomonas_oryzae-PilA.tribs.Rdata +0 -0
  234. data/utils/enveomics/Tests/Xanthomonas_oryzae-PilA.txt +7 -0
  235. data/utils/enveomics/Tests/Xanthomonas_oryzae.aai-mat.tsv +17 -0
  236. data/utils/enveomics/Tests/Xanthomonas_oryzae.aai.tsv +137 -0
  237. data/utils/enveomics/Tests/a_mg.cds-go.blast.tsv +123 -0
  238. data/utils/enveomics/Tests/a_mg.reads-cds.blast.tsv +200 -0
  239. data/utils/enveomics/Tests/a_mg.reads-cds.counts.tsv +55 -0
  240. data/utils/enveomics/Tests/alkB.nwk +1 -0
  241. data/utils/enveomics/Tests/anthrax-cansnp-data.tsv +13 -0
  242. data/utils/enveomics/Tests/anthrax-cansnp-key.tsv +17 -0
  243. data/utils/enveomics/Tests/hiv1.faa +59 -0
  244. data/utils/enveomics/Tests/hiv1.fna +134 -0
  245. data/utils/enveomics/Tests/hiv2.faa +70 -0
  246. data/utils/enveomics/Tests/hiv_mix-hiv1.blast.tsv +233 -0
  247. data/utils/enveomics/Tests/hiv_mix-hiv1.blast.tsv.lim +1 -0
  248. data/utils/enveomics/Tests/hiv_mix-hiv1.blast.tsv.rec +233 -0
  249. data/utils/enveomics/Tests/phyla_counts.tsv +10 -0
  250. data/utils/enveomics/Tests/primate_lentivirus.ogs +11 -0
  251. data/utils/enveomics/Tests/primate_lentivirus.rbm/hiv1-hiv1.rbm +9 -0
  252. data/utils/enveomics/Tests/primate_lentivirus.rbm/hiv1-hiv2.rbm +8 -0
  253. data/utils/enveomics/Tests/primate_lentivirus.rbm/hiv1-siv.rbm +6 -0
  254. data/utils/enveomics/Tests/primate_lentivirus.rbm/hiv2-hiv2.rbm +9 -0
  255. data/utils/enveomics/Tests/primate_lentivirus.rbm/hiv2-siv.rbm +6 -0
  256. data/utils/enveomics/Tests/primate_lentivirus.rbm/siv-siv.rbm +6 -0
  257. data/utils/enveomics/build_enveomics_r.bash +45 -0
  258. data/utils/enveomics/enveomics.R/DESCRIPTION +31 -0
  259. data/utils/enveomics/enveomics.R/NAMESPACE +39 -0
  260. data/utils/enveomics/enveomics.R/R/autoprune.R +155 -0
  261. data/utils/enveomics/enveomics.R/R/barplot.R +184 -0
  262. data/utils/enveomics/enveomics.R/R/cliopts.R +135 -0
  263. data/utils/enveomics/enveomics.R/R/df2dist.R +154 -0
  264. data/utils/enveomics/enveomics.R/R/growthcurve.R +331 -0
  265. data/utils/enveomics/enveomics.R/R/prefscore.R +79 -0
  266. data/utils/enveomics/enveomics.R/R/recplot.R +354 -0
  267. data/utils/enveomics/enveomics.R/R/recplot2.R +1631 -0
  268. data/utils/enveomics/enveomics.R/R/tribs.R +583 -0
  269. data/utils/enveomics/enveomics.R/R/utils.R +80 -0
  270. data/utils/enveomics/enveomics.R/README.md +81 -0
  271. data/utils/enveomics/enveomics.R/data/growth.curves.rda +0 -0
  272. data/utils/enveomics/enveomics.R/data/phyla.counts.rda +0 -0
  273. data/utils/enveomics/enveomics.R/man/cash-enve.GrowthCurve-method.Rd +16 -0
  274. data/utils/enveomics/enveomics.R/man/cash-enve.RecPlot2-method.Rd +16 -0
  275. data/utils/enveomics/enveomics.R/man/cash-enve.RecPlot2.Peak-method.Rd +16 -0
  276. data/utils/enveomics/enveomics.R/man/enve.GrowthCurve-class.Rd +25 -0
  277. data/utils/enveomics/enveomics.R/man/enve.TRIBS-class.Rd +46 -0
  278. data/utils/enveomics/enveomics.R/man/enve.TRIBS.merge.Rd +23 -0
  279. data/utils/enveomics/enveomics.R/man/enve.TRIBStest-class.Rd +47 -0
  280. data/utils/enveomics/enveomics.R/man/enve.__prune.iter.Rd +23 -0
  281. data/utils/enveomics/enveomics.R/man/enve.__prune.reduce.Rd +23 -0
  282. data/utils/enveomics/enveomics.R/man/enve.__tribs.Rd +40 -0
  283. data/utils/enveomics/enveomics.R/man/enve.barplot.Rd +103 -0
  284. data/utils/enveomics/enveomics.R/man/enve.cliopts.Rd +67 -0
  285. data/utils/enveomics/enveomics.R/man/enve.col.alpha.Rd +24 -0
  286. data/utils/enveomics/enveomics.R/man/enve.col2alpha.Rd +19 -0
  287. data/utils/enveomics/enveomics.R/man/enve.df2dist.Rd +45 -0
  288. data/utils/enveomics/enveomics.R/man/enve.df2dist.group.Rd +44 -0
  289. data/utils/enveomics/enveomics.R/man/enve.df2dist.list.Rd +47 -0
  290. data/utils/enveomics/enveomics.R/man/enve.growthcurve.Rd +75 -0
  291. data/utils/enveomics/enveomics.R/man/enve.prefscore.Rd +50 -0
  292. data/utils/enveomics/enveomics.R/man/enve.prune.dist.Rd +44 -0
  293. data/utils/enveomics/enveomics.R/man/enve.recplot.Rd +139 -0
  294. data/utils/enveomics/enveomics.R/man/enve.recplot2-class.Rd +45 -0
  295. data/utils/enveomics/enveomics.R/man/enve.recplot2.ANIr.Rd +24 -0
  296. data/utils/enveomics/enveomics.R/man/enve.recplot2.Rd +77 -0
  297. data/utils/enveomics/enveomics.R/man/enve.recplot2.__counts.Rd +25 -0
  298. data/utils/enveomics/enveomics.R/man/enve.recplot2.__peakHist.Rd +21 -0
  299. data/utils/enveomics/enveomics.R/man/enve.recplot2.__whichClosestPeak.Rd +19 -0
  300. data/utils/enveomics/enveomics.R/man/enve.recplot2.changeCutoff.Rd +19 -0
  301. data/utils/enveomics/enveomics.R/man/enve.recplot2.compareIdentities.Rd +47 -0
  302. data/utils/enveomics/enveomics.R/man/enve.recplot2.coordinates.Rd +29 -0
  303. data/utils/enveomics/enveomics.R/man/enve.recplot2.corePeak.Rd +18 -0
  304. data/utils/enveomics/enveomics.R/man/enve.recplot2.extractWindows.Rd +45 -0
  305. data/utils/enveomics/enveomics.R/man/enve.recplot2.findPeaks.Rd +36 -0
  306. data/utils/enveomics/enveomics.R/man/enve.recplot2.findPeaks.__em_e.Rd +19 -0
  307. data/utils/enveomics/enveomics.R/man/enve.recplot2.findPeaks.__em_m.Rd +19 -0
  308. data/utils/enveomics/enveomics.R/man/enve.recplot2.findPeaks.__emauto_one.Rd +27 -0
  309. data/utils/enveomics/enveomics.R/man/enve.recplot2.findPeaks.__mow_one.Rd +52 -0
  310. data/utils/enveomics/enveomics.R/man/enve.recplot2.findPeaks.__mower.Rd +17 -0
  311. data/utils/enveomics/enveomics.R/man/enve.recplot2.findPeaks.em.Rd +51 -0
  312. data/utils/enveomics/enveomics.R/man/enve.recplot2.findPeaks.emauto.Rd +43 -0
  313. data/utils/enveomics/enveomics.R/man/enve.recplot2.findPeaks.mower.Rd +82 -0
  314. data/utils/enveomics/enveomics.R/man/enve.recplot2.peak-class.Rd +59 -0
  315. data/utils/enveomics/enveomics.R/man/enve.recplot2.seqdepth.Rd +27 -0
  316. data/utils/enveomics/enveomics.R/man/enve.recplot2.windowDepthThreshold.Rd +36 -0
  317. data/utils/enveomics/enveomics.R/man/enve.selvector.Rd +23 -0
  318. data/utils/enveomics/enveomics.R/man/enve.tribs.Rd +68 -0
  319. data/utils/enveomics/enveomics.R/man/enve.tribs.test.Rd +28 -0
  320. data/utils/enveomics/enveomics.R/man/enve.truncate.Rd +27 -0
  321. data/utils/enveomics/enveomics.R/man/growth.curves.Rd +14 -0
  322. data/utils/enveomics/enveomics.R/man/phyla.counts.Rd +13 -0
  323. data/utils/enveomics/enveomics.R/man/plot.enve.GrowthCurve.Rd +78 -0
  324. data/utils/enveomics/enveomics.R/man/plot.enve.TRIBS.Rd +46 -0
  325. data/utils/enveomics/enveomics.R/man/plot.enve.TRIBStest.Rd +45 -0
  326. data/utils/enveomics/enveomics.R/man/plot.enve.recplot2.Rd +125 -0
  327. data/utils/enveomics/enveomics.R/man/summary.enve.GrowthCurve.Rd +19 -0
  328. data/utils/enveomics/enveomics.R/man/summary.enve.TRIBS.Rd +19 -0
  329. data/utils/enveomics/enveomics.R/man/summary.enve.TRIBStest.Rd +19 -0
  330. data/utils/enveomics/globals.mk +8 -0
  331. data/utils/enveomics/manifest.json +9 -0
  332. data/utils/multitrim/Multitrim How-To.pdf +0 -0
  333. data/utils/multitrim/README.md +67 -0
  334. data/utils/multitrim/multitrim.py +1555 -0
  335. data/utils/multitrim/multitrim.yml +13 -0
  336. data/utils/requirements.txt +4 -3
  337. metadata +304 -3
@@ -0,0 +1,227 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ #
4
+ # @author Luis M. Rodriguez-R <lmrodriguezr at gmail dot com>
5
+ # @update: Feb-06-2015
6
+ # @license artistic license 2.0
7
+ #
8
+
9
+ require 'optparse'
10
+
11
+ $opts = {:warns=>false}
12
+ ARGV << '-h' if ARGV.size==0
13
+ OptionParser.new do |opt|
14
+ opt.separator "Re-formats Silva taxonomy into NCBI-like taxonomy dump files."
15
+ opt.separator ""
16
+ opt.separator "Mandatory arguments"
17
+ opt.on("-k", "--silvaranks FILE", "Input Silva ranks file (e.g., tax_ranks_ssu_115.txt)."){ |v| $opts[:silvaranks]=v }
18
+ opt.on("-f", "--silvaref FILE", "Input Silva ref alignment file (e.g., SSURef_NR99_115_tax_silva_full_align_trunc.fasta)."){ |v| $opts[:silvaref]=v }
19
+ opt.separator ""
20
+ opt.separator "Additional options"
21
+ opt.on("-p", "--patch FILE", "If passed, it replaces the paths specified in the patch."){ |v| $opts[:patch]=v }
22
+ opt.on("-s", "--seqinfo FILE", "If passed, it creates a CSV seq-info file compatible with taxtastic."){ |v| $opts[:seqinfo]=v }
23
+ opt.on("-t", "--taxfile FILE", "If passed, it creates a simple TSV taxonomy file."){ |v| $opts[:taxfile]=v }
24
+ opt.on("-n", "--ncbi FILE", "If passed, output folder for the NCBI dump files (e.g., taxdmp)."){ |v| $opts[:ncbi]=v }
25
+ opt.on("-w", "--warns", "Verbously display warnings."){ $opts[:warns]=true }
26
+ opt.on("-h", "--help","Display this screen") do
27
+ puts opt
28
+ exit
29
+ end
30
+ opt.separator ""
31
+ end.parse!
32
+ abort "-k/--silvaranks is mandatory." if $opts[:silvaranks].nil?
33
+ abort "-k/--silvaranks must exist." unless File.exists? $opts[:silvaranks]
34
+ abort "-f/--silvaref is mandatory." if $opts[:silvaref].nil?
35
+ abort "-f/--silvaref must exist." unless File.exists? $opts[:silvaref]
36
+
37
+ class Node
38
+ attr_accessor :id, :tax, :leaf, :name_type
39
+ attr_reader :name, :rank, :parent, :children
40
+ def initialize(name, rank=nil)
41
+ @name = name
42
+ @rank = rank.nil? ? "no rank" : rank
43
+ @children = []
44
+ @leaf = false
45
+ @name_type = "scientific name";
46
+ end
47
+ def parent=(node)
48
+ @parent=node
49
+ node.add_child(self)
50
+ end
51
+ def add_child(node)
52
+ @children << node
53
+ end
54
+ def ncbirank
55
+ ncbirank =
56
+ self.rank == "superkingdom" ? "no rank" :
57
+ self.rank == "domain" ? "superkingdom" :
58
+ self.rank == "major_clade" ? "no rank" : self.rank
59
+ return ncbirank
60
+ end
61
+ def path
62
+ if self.parent.nil?
63
+ self.name
64
+ else
65
+ "#{self.parent.path};#{self.name}"
66
+ end
67
+ end
68
+ def each_desc internals, leaves, &blk
69
+ blk[self] if (leaves and self.leaf) or (internals and not self.leaf)
70
+ self.children.each {|child| child.each_desc internals, leaves, &blk}
71
+ end
72
+ def to_s
73
+ "#{self.name} (#{self.rank})"
74
+ end
75
+ end
76
+
77
+ class Taxonomy
78
+ attr_reader :root, :next_id
79
+ def initialize
80
+ @root = Node.new('root')
81
+ @root.id = 1
82
+ @next_id = 2
83
+ end
84
+ def register(node)
85
+ node.id = self.next_id
86
+ node.parent = self.root if node.parent.nil?
87
+ @next_id += 1
88
+ end
89
+ def node(path)
90
+ node = self.root
91
+ path.each do |level|
92
+ node.children.each do |child|
93
+ if child.name == level
94
+ node = child
95
+ break
96
+ end
97
+ end
98
+ unless node.name == level
99
+ $stderr.puts "Warning: Impossible to find #{level} at #{node.to_s}, making it up." if $opts[:warns]
100
+ child = Node.new(level)
101
+ child.parent = node
102
+ self.register(child)
103
+ node = child
104
+ end
105
+ end
106
+ node
107
+ end
108
+ def each_node &blk
109
+ self.root.each_desc true, true, &blk
110
+ end
111
+ def each_leaf &blk
112
+ self.root.each_desc false, true, &blk
113
+ end
114
+ def each_internal &blk
115
+ self.root.each_desc true, false, &blk
116
+ end
117
+ end
118
+
119
+ begin
120
+ taxo = Taxonomy.new()
121
+
122
+ ## Read patch
123
+ patch = {}
124
+ unless $opts[:patch].nil?
125
+ $stderr.puts "Reading patch: #{$opts[:patch]}"
126
+ f = File.open($opts[:patch], "r")
127
+ while(ln = f.gets)
128
+ m = ln.chomp.split(/\t/)
129
+ patch[ m[0] ] = m[1]
130
+ end
131
+ end
132
+
133
+ ## Read the Silva ranks
134
+ $stderr.puts "Reading Silva ranks: #{$opts[:silvaranks]}"
135
+ f = File.open($opts[:silvaranks], "r")
136
+ f.gets # header
137
+ while(ln = f.gets)
138
+ m = ln.chomp.split(/\t/)
139
+ m[0] = patch[ m[0] ] unless patch[ m[0] ].nil?
140
+ p = m[0].split(/;/)
141
+ raise "Inconsistent path and node name at line #{$.}: #{ln}." unless m[1] == p.pop
142
+ if m[3] != "w"
143
+ node = Node.new(m[1], m[2])
144
+ node.name_type = "common name" if m[3] == "a"
145
+ node.parent = taxo.node(p)
146
+ taxo.register(node)
147
+ end
148
+ end
149
+ f.close
150
+
151
+ $stderr.puts " Top taxa:"
152
+ taxo.root.children.each do |top|
153
+ $stderr.puts " o #{top.to_s} has #{top.children.length} children."
154
+ end
155
+
156
+ ## Read the Silva ref alignment
157
+ $stderr.puts "Reading Silva ref alignment: #{$opts[:silvaref]}"
158
+ i = 0
159
+ f = File.open($opts[:silvaref], "r")
160
+ while(ln = f.gets)
161
+ m = />([^\s]+)\s(.*)/.match(ln)
162
+ next unless m
163
+ # Patch
164
+ pm = /(.+);([^;]+)/.match(m[2])
165
+ path = "#{patch[ pm[1] ].nil? ? pm[1] : patch[ pm[1] ]};#{pm[2]}".split(/;/)
166
+ # Register
167
+ node = taxo.node(path)
168
+ taxo.register(node)
169
+ refseq = Node.new(m[1], 'refseq')
170
+ refseq.parent = node
171
+ refseq.leaf = true
172
+ taxo.register(refseq)
173
+ i += 1
174
+ end
175
+ f.close
176
+ $stderr.puts " Saved #{i} leaves."
177
+
178
+ ### NCBI
179
+ unless $opts[:ncbi].nil?
180
+ ## Create taxonomy .dmp files
181
+ $stderr.puts "Creating NCBI-like files: #{$opts[:ncbi]}"
182
+ Dir.mkdir($opts[:ncbi]) unless Dir.exists?($opts[:ncbi]);
183
+ # merged.dmp
184
+ $stderr.puts " o Creating merged.dmp"
185
+ File.open(File.join($opts[:ncbi], 'merged.dmp'), 'w'){}
186
+ # names.dmp
187
+ $stderr.puts " o Creating names.dmp"
188
+ f = File.open(File.join($opts[:ncbi], 'names.dmp'), 'w')
189
+ taxo.each_internal do |n|
190
+ f.puts [n.id, n.name, "", n.name_type].join("\t|\t")+"\t|"
191
+ end
192
+ f.close
193
+ # nodes.dmp
194
+ $stderr.puts " o Creating nodes.dmp"
195
+ f = File.open(File.join($opts[:ncbi], 'nodes.dmp'), 'w')
196
+ taxo.each_internal do |n|
197
+ f.puts ([n.id, n.parent.nil? ? n.id : n.parent.id, n.ncbirank, ""] << Array.new(8,0) << "").join("\t|\t")+"\t|"
198
+ end
199
+ f.close
200
+ end
201
+
202
+ ## Taxtastic
203
+ unless $opts[:seqinfo].nil?
204
+ $stderr.puts "Creating seq-info file: #{$opts[:seqinfo]}"
205
+ f = File.open($opts[:seqinfo], 'w')
206
+ f.puts "\"seqname\",\"tax_id\",\"group_name\""
207
+ taxo.each_leaf { |n| f.puts "\"#{n.name}\",\"#{n.parent.id}\",\"#{n.parent.name}\"" }
208
+ f.close
209
+ end
210
+
211
+ ## Misc
212
+ unless $opts[:taxfile].nil?
213
+ $stderr.puts "Creating taxonomy file: #{$opts[:taxfile]}"
214
+ f = File.open($opts[:taxfile], 'w')
215
+ f.puts "tax_id\tparent_id\trank\ttax_name"
216
+ taxo.each_internal do |n|
217
+ f.puts [n.id, n.parent.nil? ? n.id : n.parent.id, n.rank, n.name].join("\t")
218
+ end
219
+ f.close
220
+ end
221
+ rescue => err
222
+ $stderr.puts "Exception: #{err}\n\n"
223
+ err.backtrace.each { |l| $stderr.puts l + "\n" }
224
+ err
225
+ end
226
+
227
+
@@ -0,0 +1,147 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # @author Luis M. Rodriguez-R
4
+ # @license Artistic-2.0
5
+
6
+ $:.push File.expand_path("../lib", __FILE__)
7
+ require "enveomics_rb/enveomics"
8
+ require "enveomics_rb/vcf"
9
+
10
+ o = {}
11
+ OptionParser.new do |opt|
12
+ opt.banner = "
13
+ Estimates the Ka/Ks ratio from the SNPs in a VCF file. Ka and Ks are corrected
14
+ using pseudo-counts, but no corrections for multiple substitutions are
15
+ applied.
16
+
17
+ Usage: #{$0} [options]".gsub(/^ +/,"")
18
+ opt.separator ""
19
+ opt.separator "Mandatory"
20
+ opt.on("-i", "--input FILE",
21
+ "Input file in Variant Call Format (VCF)."){ |v| o[:file] = v}
22
+ opt.on("-s", "--seqs FILE",
23
+ "Input gene sequences (nucleotides) in FastA format."){ |v| o[:seqs] = v}
24
+ opt.separator ""
25
+ opt.separator "Parameters"
26
+ opt.on("-f", "--syn-frx FLOAT",
27
+ "Fraction of synonymous substitutions. If passed, the number of sites are",
28
+ "estimated (not counted per gene), speeding up the computation ~10X."
29
+ ){ |v| o[:syn_frx] = v.to_f }
30
+ opt.on("-b", "--syn-bacterial-code",
31
+ "Sets --syn-frx to 0.760417, approximately the proportion of synonymous",
32
+ "substitutions in the bacterial code."){ o[:syn_frx] = 0.760417 }
33
+ opt.separator ""
34
+ opt.separator "Miscellaneous"
35
+ opt.on("-c", "--codon-file FILE",
36
+ "Output file including the codons of substitution variants."
37
+ ){ |v| o[:codon_file] = v }
38
+ opt.on("-h", "--help", "Display this screen.") do
39
+ puts opt
40
+ exit
41
+ end
42
+ opt.separator ""
43
+ end.parse!
44
+
45
+ abort "--input is mandatory" if o[:file].nil?
46
+ abort "--seqs is mandatory" if o[:seqs].nil?
47
+
48
+ # Codon table (11. The Bacterial, Archaeal and Plant Plastid Code)
49
+ # https://www.ncbi.nlm.nih.gov/Taxonomy/Utils/wprintgc.cgi#SG11
50
+ t = {
51
+ AAs: "FFLLSSSSYY**CC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG",
52
+ Starts: "---M------**--*----M------------MMMM---------------M------------",
53
+ Base1: "TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG",
54
+ Base2: "TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG",
55
+ Base3: "TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG"
56
+ }
57
+ $codon_aa = {}
58
+ $codon_st = {}
59
+ (0 .. (t[:Base1].size-1)).each do |i|
60
+ cod = [:Base1, :Base2, :Base3].map{ |k| t[k][i] }.join
61
+ $codon_aa[cod] = t[:AAs][i]
62
+ $codon_st[cod] = t[:Starts][i]
63
+ end
64
+
65
+ ##
66
+ # Is the change +cod+ to +cod_alt+ synonymous? +start_codon+ indicates if the
67
+ # codon the first in the gene.
68
+ def syn?(cod, cod_alt, start_codon=false)
69
+ start_codon ?
70
+ ( $codon_st[cod] == $codon_st[cod_alt] ) :
71
+ ( $codon_aa[cod] == $codon_aa[cod_alt] )
72
+ end
73
+
74
+ ##
75
+ # Estimates the fraction of times that the substitutions in the sequence +seq+
76
+ # result in synonymous mutations from those in position +pos+ by any of the
77
+ # nucleotides in +alts+.
78
+ def syn_fraction(seq, pos, alts)
79
+ cod_let = (pos-1)%3
80
+ cod_pos = (pos-1) - cod_let
81
+ cod = seq[cod_pos .. (cod_pos+2)]
82
+ syn = 0
83
+ cod_alts = alts.map do |alt|
84
+ cod_alt = "#{cod}"
85
+ cod_alt[cod_let] = alt
86
+ cod_alt
87
+ end
88
+ syn = cod_alts.map{ |i| syn?(cod, i, pos<=3) ? 1 : 0 }.inject(0,:+)
89
+ $codon_fh.puts [syn, cod, cod_alts.join(",")].join("\t") unless $codon_fh.nil?
90
+ syn.to_f/alts.size
91
+ end
92
+
93
+ # Read sequences
94
+ seqs = {}
95
+ File.open(o[:seqs], "r") do |fh|
96
+ id = ""
97
+ fh.each_line do |ln|
98
+ if ln =~ /^>(\S+)/
99
+ id = $1
100
+ seqs[id] = ""
101
+ else
102
+ seqs[id] += ln.chomp.gsub(/[^A-Za-z]/, "")
103
+ end
104
+ end
105
+ end
106
+
107
+ # Process variants
108
+ $codon_fh = nil
109
+ unless o[:codon_file].nil?
110
+ $codon_fh = File.open(o[:codon_file], "w")
111
+ $codon_fh.puts "#" + %w[Syn Ref Alt].join("\t")
112
+ end
113
+ vcf = VCF.new(o[:file])
114
+ gen = {}
115
+ vcf.each_variant do |v|
116
+ next if v.indel?
117
+ raise "REF doesn't match VCF:\n#{v}" unless seqs[v.chrom][v.pos-1] == v.ref
118
+ gen[v.chrom] ||= [0.0, 0.0]
119
+ alts = v.alt.split(",")
120
+ syn = syn_fraction(seqs[v.chrom], v.pos, alts)
121
+ gen[v.chrom][0] += 1.0-syn
122
+ gen[v.chrom][1] += syn
123
+ end
124
+ $codon_fh.close unless $codon_fh.nil?
125
+ $codon_fh = nil
126
+
127
+ # Ka/Ks
128
+ puts "#" +
129
+ "SeqID KaKs Ka Ks NonSynSubs SynSubs NonSynSites SynSites".tr(" ","\t")
130
+ gen.each do |k,v|
131
+ if o[:syn_frx].nil?
132
+ v[2,3] = [0.0,0.0]
133
+ (1 .. seqs[k].size).each do |pos|
134
+ alts = %w(A C T G) - [seqs[k][pos-1]]
135
+ syn = syn_fraction(seqs[k], pos, alts)
136
+ v[2] += 1.0-syn
137
+ v[3] += syn
138
+ end
139
+ else
140
+ v[2] = seqs[k].size.to_f*o[:syn_frx]
141
+ v[3] = seqs[k].size.to_f*(1.0-o[:syn_frx])
142
+ end
143
+ ka = (v[0] + 1) / (v[2] + 2)
144
+ ks = (v[1] + 1) / (v[3] + 2)
145
+ puts ([k, ka/ks, ka, ks] + v).join("\t")
146
+ end
147
+
@@ -0,0 +1,88 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # @author Luis M. Rodriguez-R
4
+ # @license Artistic-2.0
5
+
6
+ $:.push File.expand_path(File.dirname(__FILE__) + "/lib")
7
+ require "enveomics_rb/enveomics"
8
+ require "enveomics_rb/vcf"
9
+
10
+ o = {min_dp:4, max_dp:Float::INFINITY, min_ref_dp:2, min_alt_dp:2, min_qual:0.0,
11
+ indels:false, min_ic:0.0}
12
+ OptionParser.new do |opt|
13
+ opt.banner = "
14
+ Counts the number of Single-Nucleotide Polymorphisms (SNPs) in a VCF file.
15
+
16
+ Usage: #{$0} [options]".gsub(/^ +/,"")
17
+ opt.separator ""
18
+ opt.separator "Mandatory"
19
+ opt.on("-i", "--input FILE",
20
+ "Input file in Variant Call Format (VCF)."){ |v| o[:file] = v}
21
+ opt.separator ""
22
+ opt.separator "Parameters"
23
+ opt.on("-o", "--out FILE",
24
+ "Output (filtered) file in Variant Call Format (VCF)."){ |v| o[:out] = v}
25
+ opt.on("-m", "--min-dp INT",
26
+ "Minimum number of reads covering the position. By default: #{o[:min_dp]}."
27
+ ){ |v| o[:min_dp] = v.to_i }
28
+ opt.on("-M", "--max-dp INT",
29
+ "Maximum number of reads covering the position. By default: #{o[:max_dp]}."
30
+ ){ |v| o[:max_dp] = (v=="Infinity" ? Float::INFINITY : v.to_i) }
31
+ opt.on("-r", "--min-ref-dp INT",
32
+ "Minimum number of reads supporting allele REF. " +
33
+ "By default: #{o[:min_ref_dp]}."
34
+ ){ |v| o[:min_ref_dp] = v.to_i }
35
+ opt.on("-a", "--min-alt-dp INT",
36
+ "Minimum number of reads supporting allele ALT. " +
37
+ "By default: #{o[:min_alt_dp]}."
38
+ ){ |v| o[:min_alt_dp] = v.to_i }
39
+ opt.on("-q", "--min-quality FLOAT",
40
+ "Minimum quality of the position mapping. By default: #{o[:min_qual]}."
41
+ ){ |v| o[:max_dp] = v.to_f }
42
+ opt.on("-s", "--min-shannon FLOAT",
43
+ "Minimum information content (in bits, from 0 to 1). " +
44
+ "By default: #{o[:min_ic]}"){ |v| o[:min_ic] = v.to_f }
45
+ opt.on("--[no-]indels",
46
+ "Process (or ignore) indels. By default: ignore."
47
+ ){ |v| o[:indels] = v }
48
+ opt.on("-h", "--help", "Display this screen.") do
49
+ puts opt
50
+ exit
51
+ end
52
+ opt.separator ""
53
+ end.parse!
54
+
55
+ abort "--input is mandatory" if o[:file].nil?
56
+
57
+ vcf = VCF.new(o[:file])
58
+ c = 0
59
+ dp = 0
60
+ ref_dp = 0
61
+ alt_dp = 0
62
+ h = 0
63
+ unless o[:out].nil?
64
+ ofh = File.open(o[:out], "w")
65
+ vcf.each_header{ |h| ofh.print h }
66
+ end
67
+ vcf.each_variant do |v|
68
+ next if v.indel? and not o[:indels]
69
+ next if v.dp < o[:min_dp]
70
+ next if v.dp > o[:max_dp]
71
+ next if v.ref_dp < o[:min_ref_dp]
72
+ next if v.alt_dp < o[:min_alt_dp]
73
+ next if v.qual < o[:min_qual]
74
+ next if v.shannon < o[:min_ic]
75
+ c += 1
76
+ dp += v.dp
77
+ ref_dp += v.ref_dp
78
+ alt_dp += v.alt_dp
79
+ h += v.shannon
80
+ ofh.print v.to_s unless o[:out].nil?
81
+ end
82
+ ofh.close unless o[:out].nil?
83
+
84
+ puts "SNPs: #{c}", "Information content: #{h}",
85
+ "Average SNP depth: #{dp.to_f/c}",
86
+ "Average REF allele depth: #{ref_dp.to_f/c}",
87
+ "Average ALT allele depth: #{alt_dp.to_f/c}"
88
+