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.
- checksums.yaml +4 -4
- data/lib/miga/_data/aai-intax.blast.tsv.gz +0 -0
- data/lib/miga/_data/aai-intax.diamond.tsv.gz +0 -0
- data/lib/miga/_data/aai-novel.blast.tsv.gz +0 -0
- data/lib/miga/_data/aai-novel.diamond.tsv.gz +0 -0
- data/lib/miga/cli/action/classify_wf.rb +2 -2
- data/lib/miga/cli/action/derep_wf.rb +1 -1
- data/lib/miga/cli/action/doctor.rb +57 -14
- data/lib/miga/cli/action/doctor/base.rb +47 -23
- data/lib/miga/cli/action/init.rb +11 -7
- data/lib/miga/cli/action/init/files_helper.rb +1 -0
- data/lib/miga/cli/action/ncbi_get.rb +3 -3
- data/lib/miga/cli/action/tax_dist.rb +2 -2
- data/lib/miga/cli/action/wf.rb +5 -4
- data/lib/miga/common.rb +1 -0
- data/lib/miga/daemon.rb +11 -4
- data/lib/miga/dataset/result.rb +10 -6
- data/lib/miga/json.rb +5 -4
- data/lib/miga/metadata.rb +5 -1
- data/lib/miga/parallel.rb +36 -0
- data/lib/miga/project.rb +8 -8
- data/lib/miga/project/base.rb +4 -4
- data/lib/miga/project/result.rb +2 -2
- data/lib/miga/sqlite.rb +10 -2
- data/lib/miga/version.rb +23 -9
- data/scripts/aai_distances.bash +16 -18
- data/scripts/ani_distances.bash +16 -17
- data/scripts/assembly.bash +31 -16
- data/scripts/haai_distances.bash +3 -27
- data/scripts/miga.bash +6 -4
- data/scripts/p.bash +1 -1
- data/scripts/read_quality.bash +9 -18
- data/scripts/trimmed_fasta.bash +14 -30
- data/scripts/trimmed_reads.bash +36 -36
- data/test/parallel_test.rb +31 -0
- data/test/project_test.rb +2 -1
- data/test/remote_dataset_test.rb +1 -1
- data/utils/FastAAI/00.Libraries/01.SCG_HMMs/Archaea_SCG.hmm +41964 -0
- data/utils/FastAAI/00.Libraries/01.SCG_HMMs/Bacteria_SCG.hmm +32439 -0
- data/utils/FastAAI/00.Libraries/01.SCG_HMMs/Complete_SCG_DB.hmm +62056 -0
- data/utils/FastAAI/FastAAI/FastAAI +1336 -0
- data/utils/FastAAI/README.md +84 -0
- data/utils/FastAAI/kAAI_v1.0_virus.py +1296 -0
- data/utils/distance/commands.rb +1 -0
- data/utils/distance/database.rb +0 -1
- data/utils/distance/runner.rb +2 -4
- data/utils/enveomics/Docs/recplot2.md +244 -0
- data/utils/enveomics/Examples/aai-matrix.bash +66 -0
- data/utils/enveomics/Examples/ani-matrix.bash +66 -0
- data/utils/enveomics/Examples/essential-phylogeny.bash +105 -0
- data/utils/enveomics/Examples/unus-genome-phylogeny.bash +100 -0
- data/utils/enveomics/LICENSE.txt +73 -0
- data/utils/enveomics/Makefile +52 -0
- data/utils/enveomics/Manifest/Tasks/aasubs.json +103 -0
- data/utils/enveomics/Manifest/Tasks/blasttab.json +786 -0
- data/utils/enveomics/Manifest/Tasks/distances.json +161 -0
- data/utils/enveomics/Manifest/Tasks/fasta.json +802 -0
- data/utils/enveomics/Manifest/Tasks/fastq.json +291 -0
- data/utils/enveomics/Manifest/Tasks/graphics.json +126 -0
- data/utils/enveomics/Manifest/Tasks/mapping.json +137 -0
- data/utils/enveomics/Manifest/Tasks/ogs.json +382 -0
- data/utils/enveomics/Manifest/Tasks/other.json +906 -0
- data/utils/enveomics/Manifest/Tasks/remote.json +355 -0
- data/utils/enveomics/Manifest/Tasks/sequence-identity.json +638 -0
- data/utils/enveomics/Manifest/Tasks/tables.json +308 -0
- data/utils/enveomics/Manifest/Tasks/trees.json +68 -0
- data/utils/enveomics/Manifest/Tasks/variants.json +111 -0
- data/utils/enveomics/Manifest/categories.json +165 -0
- data/utils/enveomics/Manifest/examples.json +154 -0
- data/utils/enveomics/Manifest/tasks.json +4 -0
- data/utils/enveomics/Pipelines/assembly.pbs/CONFIG.mock.bash +69 -0
- data/utils/enveomics/Pipelines/assembly.pbs/FastA.N50.pl +1 -0
- data/utils/enveomics/Pipelines/assembly.pbs/FastA.filterN.pl +1 -0
- data/utils/enveomics/Pipelines/assembly.pbs/FastA.length.pl +1 -0
- data/utils/enveomics/Pipelines/assembly.pbs/README.md +189 -0
- data/utils/enveomics/Pipelines/assembly.pbs/RUNME-2.bash +112 -0
- data/utils/enveomics/Pipelines/assembly.pbs/RUNME-3.bash +23 -0
- data/utils/enveomics/Pipelines/assembly.pbs/RUNME-4.bash +44 -0
- data/utils/enveomics/Pipelines/assembly.pbs/RUNME.bash +50 -0
- data/utils/enveomics/Pipelines/assembly.pbs/kSelector.R +37 -0
- data/utils/enveomics/Pipelines/assembly.pbs/newbler.pbs +68 -0
- data/utils/enveomics/Pipelines/assembly.pbs/newbler_preparator.pl +49 -0
- data/utils/enveomics/Pipelines/assembly.pbs/soap.pbs +80 -0
- data/utils/enveomics/Pipelines/assembly.pbs/stats.pbs +57 -0
- data/utils/enveomics/Pipelines/assembly.pbs/velvet.pbs +63 -0
- data/utils/enveomics/Pipelines/blast.pbs/01.pbs.bash +38 -0
- data/utils/enveomics/Pipelines/blast.pbs/02.pbs.bash +73 -0
- data/utils/enveomics/Pipelines/blast.pbs/03.pbs.bash +21 -0
- data/utils/enveomics/Pipelines/blast.pbs/BlastTab.recover_job.pl +72 -0
- data/utils/enveomics/Pipelines/blast.pbs/CONFIG.mock.bash +98 -0
- data/utils/enveomics/Pipelines/blast.pbs/FastA.split.pl +1 -0
- data/utils/enveomics/Pipelines/blast.pbs/README.md +127 -0
- data/utils/enveomics/Pipelines/blast.pbs/RUNME.bash +109 -0
- data/utils/enveomics/Pipelines/blast.pbs/TASK.check.bash +128 -0
- data/utils/enveomics/Pipelines/blast.pbs/TASK.dry.bash +16 -0
- data/utils/enveomics/Pipelines/blast.pbs/TASK.eo.bash +22 -0
- data/utils/enveomics/Pipelines/blast.pbs/TASK.pause.bash +26 -0
- data/utils/enveomics/Pipelines/blast.pbs/TASK.run.bash +89 -0
- data/utils/enveomics/Pipelines/blast.pbs/sentinel.pbs.bash +29 -0
- data/utils/enveomics/Pipelines/idba.pbs/README.md +49 -0
- data/utils/enveomics/Pipelines/idba.pbs/RUNME.bash +95 -0
- data/utils/enveomics/Pipelines/idba.pbs/run.pbs +56 -0
- data/utils/enveomics/Pipelines/trim.pbs/README.md +54 -0
- data/utils/enveomics/Pipelines/trim.pbs/RUNME.bash +70 -0
- data/utils/enveomics/Pipelines/trim.pbs/run.pbs +130 -0
- data/utils/enveomics/README.md +42 -0
- data/utils/enveomics/Scripts/AAsubs.log2ratio.rb +171 -0
- data/utils/enveomics/Scripts/Aln.cat.rb +221 -0
- data/utils/enveomics/Scripts/Aln.convert.pl +35 -0
- data/utils/enveomics/Scripts/AlphaDiversity.pl +152 -0
- data/utils/enveomics/Scripts/BedGraph.tad.rb +93 -0
- data/utils/enveomics/Scripts/BedGraph.window.rb +71 -0
- data/utils/enveomics/Scripts/BlastPairwise.AAsubs.pl +102 -0
- data/utils/enveomics/Scripts/BlastTab.addlen.rb +63 -0
- data/utils/enveomics/Scripts/BlastTab.advance.bash +48 -0
- data/utils/enveomics/Scripts/BlastTab.best_hit_sorted.pl +55 -0
- data/utils/enveomics/Scripts/BlastTab.catsbj.pl +104 -0
- data/utils/enveomics/Scripts/BlastTab.cogCat.rb +76 -0
- data/utils/enveomics/Scripts/BlastTab.filter.pl +47 -0
- data/utils/enveomics/Scripts/BlastTab.kegg_pep2path_rest.pl +194 -0
- data/utils/enveomics/Scripts/BlastTab.metaxaPrep.pl +104 -0
- data/utils/enveomics/Scripts/BlastTab.pairedHits.rb +157 -0
- data/utils/enveomics/Scripts/BlastTab.recplot2.R +48 -0
- data/utils/enveomics/Scripts/BlastTab.seqdepth.pl +86 -0
- data/utils/enveomics/Scripts/BlastTab.seqdepth_ZIP.pl +119 -0
- data/utils/enveomics/Scripts/BlastTab.seqdepth_nomedian.pl +86 -0
- data/utils/enveomics/Scripts/BlastTab.subsample.pl +47 -0
- data/utils/enveomics/Scripts/BlastTab.sumPerHit.pl +114 -0
- data/utils/enveomics/Scripts/BlastTab.taxid2taxrank.pl +90 -0
- data/utils/enveomics/Scripts/BlastTab.topHits_sorted.rb +101 -0
- data/utils/enveomics/Scripts/Chao1.pl +97 -0
- data/utils/enveomics/Scripts/CharTable.classify.rb +234 -0
- data/utils/enveomics/Scripts/EBIseq2tax.rb +83 -0
- data/utils/enveomics/Scripts/FastA.N50.pl +60 -0
- data/utils/enveomics/Scripts/FastA.extract.rb +152 -0
- data/utils/enveomics/Scripts/FastA.filter.pl +52 -0
- data/utils/enveomics/Scripts/FastA.filterLen.pl +28 -0
- data/utils/enveomics/Scripts/FastA.filterN.pl +60 -0
- data/utils/enveomics/Scripts/FastA.fragment.rb +100 -0
- data/utils/enveomics/Scripts/FastA.gc.pl +42 -0
- data/utils/enveomics/Scripts/FastA.interpose.pl +93 -0
- data/utils/enveomics/Scripts/FastA.length.pl +38 -0
- data/utils/enveomics/Scripts/FastA.mask.rb +89 -0
- data/utils/enveomics/Scripts/FastA.per_file.pl +36 -0
- data/utils/enveomics/Scripts/FastA.qlen.pl +57 -0
- data/utils/enveomics/Scripts/FastA.rename.pl +65 -0
- data/utils/enveomics/Scripts/FastA.revcom.pl +23 -0
- data/utils/enveomics/Scripts/FastA.sample.rb +98 -0
- data/utils/enveomics/Scripts/FastA.slider.pl +85 -0
- data/utils/enveomics/Scripts/FastA.split.pl +55 -0
- data/utils/enveomics/Scripts/FastA.split.rb +79 -0
- data/utils/enveomics/Scripts/FastA.subsample.pl +131 -0
- data/utils/enveomics/Scripts/FastA.tag.rb +65 -0
- data/utils/enveomics/Scripts/FastA.toFastQ.rb +69 -0
- data/utils/enveomics/Scripts/FastA.wrap.rb +48 -0
- data/utils/enveomics/Scripts/FastQ.filter.pl +54 -0
- data/utils/enveomics/Scripts/FastQ.interpose.pl +90 -0
- data/utils/enveomics/Scripts/FastQ.maskQual.rb +89 -0
- data/utils/enveomics/Scripts/FastQ.offset.pl +90 -0
- data/utils/enveomics/Scripts/FastQ.split.pl +53 -0
- data/utils/enveomics/Scripts/FastQ.tag.rb +70 -0
- data/utils/enveomics/Scripts/FastQ.test-error.rb +81 -0
- data/utils/enveomics/Scripts/FastQ.toFastA.awk +24 -0
- data/utils/enveomics/Scripts/GFF.catsbj.pl +127 -0
- data/utils/enveomics/Scripts/GenBank.add_fields.rb +84 -0
- data/utils/enveomics/Scripts/HMM.essential.rb +351 -0
- data/utils/enveomics/Scripts/HMM.haai.rb +168 -0
- data/utils/enveomics/Scripts/HMMsearch.extractIds.rb +83 -0
- data/utils/enveomics/Scripts/JPlace.distances.rb +88 -0
- data/utils/enveomics/Scripts/JPlace.to_iToL.rb +320 -0
- data/utils/enveomics/Scripts/M5nr.getSequences.rb +81 -0
- data/utils/enveomics/Scripts/MeTaxa.distribution.pl +198 -0
- data/utils/enveomics/Scripts/MyTaxa.fragsByTax.pl +35 -0
- data/utils/enveomics/Scripts/MyTaxa.seq-taxrank.rb +49 -0
- data/utils/enveomics/Scripts/NCBIacc2tax.rb +92 -0
- data/utils/enveomics/Scripts/Newick.autoprune.R +27 -0
- data/utils/enveomics/Scripts/RAxML-EPA.to_iToL.pl +228 -0
- data/utils/enveomics/Scripts/RecPlot2.compareIdentities.R +32 -0
- data/utils/enveomics/Scripts/RefSeq.download.bash +48 -0
- data/utils/enveomics/Scripts/SRA.download.bash +55 -0
- data/utils/enveomics/Scripts/TRIBS.plot-test.R +36 -0
- data/utils/enveomics/Scripts/TRIBS.test.R +39 -0
- data/utils/enveomics/Scripts/Table.barplot.R +31 -0
- data/utils/enveomics/Scripts/Table.df2dist.R +30 -0
- data/utils/enveomics/Scripts/Table.filter.pl +61 -0
- data/utils/enveomics/Scripts/Table.merge.pl +77 -0
- data/utils/enveomics/Scripts/Table.prefScore.R +60 -0
- data/utils/enveomics/Scripts/Table.replace.rb +69 -0
- data/utils/enveomics/Scripts/Table.round.rb +63 -0
- data/utils/enveomics/Scripts/Table.split.pl +57 -0
- data/utils/enveomics/Scripts/Taxonomy.silva2ncbi.rb +227 -0
- data/utils/enveomics/Scripts/VCF.KaKs.rb +147 -0
- data/utils/enveomics/Scripts/VCF.SNPs.rb +88 -0
- data/utils/enveomics/Scripts/aai.rb +419 -0
- data/utils/enveomics/Scripts/ani.rb +362 -0
- data/utils/enveomics/Scripts/anir.rb +137 -0
- data/utils/enveomics/Scripts/clust.rand.rb +102 -0
- data/utils/enveomics/Scripts/gi2tax.rb +103 -0
- data/utils/enveomics/Scripts/in_silico_GA_GI.pl +96 -0
- data/utils/enveomics/Scripts/lib/data/dupont_2012_essential.hmm.gz +0 -0
- data/utils/enveomics/Scripts/lib/data/lee_2019_essential.hmm.gz +0 -0
- data/utils/enveomics/Scripts/lib/enveomics.R +1 -0
- data/utils/enveomics/Scripts/lib/enveomics_rb/anir.rb +293 -0
- data/utils/enveomics/Scripts/lib/enveomics_rb/bm_set.rb +175 -0
- data/utils/enveomics/Scripts/lib/enveomics_rb/enveomics.rb +24 -0
- data/utils/enveomics/Scripts/lib/enveomics_rb/errors.rb +17 -0
- data/utils/enveomics/Scripts/lib/enveomics_rb/gmm_em.rb +30 -0
- data/utils/enveomics/Scripts/lib/enveomics_rb/jplace.rb +253 -0
- data/utils/enveomics/Scripts/lib/enveomics_rb/match.rb +63 -0
- data/utils/enveomics/Scripts/lib/enveomics_rb/og.rb +182 -0
- data/utils/enveomics/Scripts/lib/enveomics_rb/rbm.rb +49 -0
- data/utils/enveomics/Scripts/lib/enveomics_rb/remote_data.rb +74 -0
- data/utils/enveomics/Scripts/lib/enveomics_rb/seq_range.rb +237 -0
- data/utils/enveomics/Scripts/lib/enveomics_rb/stats.rb +3 -0
- data/utils/enveomics/Scripts/lib/enveomics_rb/stats/rand.rb +31 -0
- data/utils/enveomics/Scripts/lib/enveomics_rb/stats/sample.rb +152 -0
- data/utils/enveomics/Scripts/lib/enveomics_rb/utils.rb +73 -0
- data/utils/enveomics/Scripts/lib/enveomics_rb/vcf.rb +135 -0
- data/utils/enveomics/Scripts/ogs.annotate.rb +88 -0
- data/utils/enveomics/Scripts/ogs.core-pan.rb +160 -0
- data/utils/enveomics/Scripts/ogs.extract.rb +125 -0
- data/utils/enveomics/Scripts/ogs.mcl.rb +186 -0
- data/utils/enveomics/Scripts/ogs.rb +104 -0
- data/utils/enveomics/Scripts/ogs.stats.rb +131 -0
- data/utils/enveomics/Scripts/rbm-legacy.rb +172 -0
- data/utils/enveomics/Scripts/rbm.rb +100 -0
- data/utils/enveomics/Scripts/sam.filter.rb +148 -0
- data/utils/enveomics/Tests/Makefile +10 -0
- data/utils/enveomics/Tests/Mgen_M2288.faa +3189 -0
- data/utils/enveomics/Tests/Mgen_M2288.fna +8282 -0
- data/utils/enveomics/Tests/Mgen_M2321.fna +8288 -0
- data/utils/enveomics/Tests/Nequ_Kin4M.faa +2970 -0
- data/utils/enveomics/Tests/Xanthomonas_oryzae-PilA.tribs.Rdata +0 -0
- data/utils/enveomics/Tests/Xanthomonas_oryzae-PilA.txt +7 -0
- data/utils/enveomics/Tests/Xanthomonas_oryzae.aai-mat.tsv +17 -0
- data/utils/enveomics/Tests/Xanthomonas_oryzae.aai.tsv +137 -0
- data/utils/enveomics/Tests/a_mg.cds-go.blast.tsv +123 -0
- data/utils/enveomics/Tests/a_mg.reads-cds.blast.tsv +200 -0
- data/utils/enveomics/Tests/a_mg.reads-cds.counts.tsv +55 -0
- data/utils/enveomics/Tests/alkB.nwk +1 -0
- data/utils/enveomics/Tests/anthrax-cansnp-data.tsv +13 -0
- data/utils/enveomics/Tests/anthrax-cansnp-key.tsv +17 -0
- data/utils/enveomics/Tests/hiv1.faa +59 -0
- data/utils/enveomics/Tests/hiv1.fna +134 -0
- data/utils/enveomics/Tests/hiv2.faa +70 -0
- data/utils/enveomics/Tests/hiv_mix-hiv1.blast.tsv +233 -0
- data/utils/enveomics/Tests/hiv_mix-hiv1.blast.tsv.lim +1 -0
- data/utils/enveomics/Tests/hiv_mix-hiv1.blast.tsv.rec +233 -0
- data/utils/enveomics/Tests/phyla_counts.tsv +10 -0
- data/utils/enveomics/Tests/primate_lentivirus.ogs +11 -0
- data/utils/enveomics/Tests/primate_lentivirus.rbm/hiv1-hiv1.rbm +9 -0
- data/utils/enveomics/Tests/primate_lentivirus.rbm/hiv1-hiv2.rbm +8 -0
- data/utils/enveomics/Tests/primate_lentivirus.rbm/hiv1-siv.rbm +6 -0
- data/utils/enveomics/Tests/primate_lentivirus.rbm/hiv2-hiv2.rbm +9 -0
- data/utils/enveomics/Tests/primate_lentivirus.rbm/hiv2-siv.rbm +6 -0
- data/utils/enveomics/Tests/primate_lentivirus.rbm/siv-siv.rbm +6 -0
- data/utils/enveomics/build_enveomics_r.bash +45 -0
- data/utils/enveomics/enveomics.R/DESCRIPTION +31 -0
- data/utils/enveomics/enveomics.R/NAMESPACE +39 -0
- data/utils/enveomics/enveomics.R/R/autoprune.R +155 -0
- data/utils/enveomics/enveomics.R/R/barplot.R +184 -0
- data/utils/enveomics/enveomics.R/R/cliopts.R +135 -0
- data/utils/enveomics/enveomics.R/R/df2dist.R +154 -0
- data/utils/enveomics/enveomics.R/R/growthcurve.R +331 -0
- data/utils/enveomics/enveomics.R/R/prefscore.R +79 -0
- data/utils/enveomics/enveomics.R/R/recplot.R +354 -0
- data/utils/enveomics/enveomics.R/R/recplot2.R +1631 -0
- data/utils/enveomics/enveomics.R/R/tribs.R +583 -0
- data/utils/enveomics/enveomics.R/R/utils.R +80 -0
- data/utils/enveomics/enveomics.R/README.md +81 -0
- data/utils/enveomics/enveomics.R/data/growth.curves.rda +0 -0
- data/utils/enveomics/enveomics.R/data/phyla.counts.rda +0 -0
- data/utils/enveomics/enveomics.R/man/cash-enve.GrowthCurve-method.Rd +16 -0
- data/utils/enveomics/enveomics.R/man/cash-enve.RecPlot2-method.Rd +16 -0
- data/utils/enveomics/enveomics.R/man/cash-enve.RecPlot2.Peak-method.Rd +16 -0
- data/utils/enveomics/enveomics.R/man/enve.GrowthCurve-class.Rd +25 -0
- data/utils/enveomics/enveomics.R/man/enve.TRIBS-class.Rd +46 -0
- data/utils/enveomics/enveomics.R/man/enve.TRIBS.merge.Rd +23 -0
- data/utils/enveomics/enveomics.R/man/enve.TRIBStest-class.Rd +47 -0
- data/utils/enveomics/enveomics.R/man/enve.__prune.iter.Rd +23 -0
- data/utils/enveomics/enveomics.R/man/enve.__prune.reduce.Rd +23 -0
- data/utils/enveomics/enveomics.R/man/enve.__tribs.Rd +40 -0
- data/utils/enveomics/enveomics.R/man/enve.barplot.Rd +103 -0
- data/utils/enveomics/enveomics.R/man/enve.cliopts.Rd +67 -0
- data/utils/enveomics/enveomics.R/man/enve.col.alpha.Rd +24 -0
- data/utils/enveomics/enveomics.R/man/enve.col2alpha.Rd +19 -0
- data/utils/enveomics/enveomics.R/man/enve.df2dist.Rd +45 -0
- data/utils/enveomics/enveomics.R/man/enve.df2dist.group.Rd +44 -0
- data/utils/enveomics/enveomics.R/man/enve.df2dist.list.Rd +47 -0
- data/utils/enveomics/enveomics.R/man/enve.growthcurve.Rd +75 -0
- data/utils/enveomics/enveomics.R/man/enve.prefscore.Rd +50 -0
- data/utils/enveomics/enveomics.R/man/enve.prune.dist.Rd +44 -0
- data/utils/enveomics/enveomics.R/man/enve.recplot.Rd +139 -0
- data/utils/enveomics/enveomics.R/man/enve.recplot2-class.Rd +45 -0
- data/utils/enveomics/enveomics.R/man/enve.recplot2.ANIr.Rd +24 -0
- data/utils/enveomics/enveomics.R/man/enve.recplot2.Rd +77 -0
- data/utils/enveomics/enveomics.R/man/enve.recplot2.__counts.Rd +25 -0
- data/utils/enveomics/enveomics.R/man/enve.recplot2.__peakHist.Rd +21 -0
- data/utils/enveomics/enveomics.R/man/enve.recplot2.__whichClosestPeak.Rd +19 -0
- data/utils/enveomics/enveomics.R/man/enve.recplot2.changeCutoff.Rd +19 -0
- data/utils/enveomics/enveomics.R/man/enve.recplot2.compareIdentities.Rd +47 -0
- data/utils/enveomics/enveomics.R/man/enve.recplot2.coordinates.Rd +29 -0
- data/utils/enveomics/enveomics.R/man/enve.recplot2.corePeak.Rd +18 -0
- data/utils/enveomics/enveomics.R/man/enve.recplot2.extractWindows.Rd +45 -0
- data/utils/enveomics/enveomics.R/man/enve.recplot2.findPeaks.Rd +36 -0
- data/utils/enveomics/enveomics.R/man/enve.recplot2.findPeaks.__em_e.Rd +19 -0
- data/utils/enveomics/enveomics.R/man/enve.recplot2.findPeaks.__em_m.Rd +19 -0
- data/utils/enveomics/enveomics.R/man/enve.recplot2.findPeaks.__emauto_one.Rd +27 -0
- data/utils/enveomics/enveomics.R/man/enve.recplot2.findPeaks.__mow_one.Rd +52 -0
- data/utils/enveomics/enveomics.R/man/enve.recplot2.findPeaks.__mower.Rd +17 -0
- data/utils/enveomics/enveomics.R/man/enve.recplot2.findPeaks.em.Rd +51 -0
- data/utils/enveomics/enveomics.R/man/enve.recplot2.findPeaks.emauto.Rd +43 -0
- data/utils/enveomics/enveomics.R/man/enve.recplot2.findPeaks.mower.Rd +82 -0
- data/utils/enveomics/enveomics.R/man/enve.recplot2.peak-class.Rd +59 -0
- data/utils/enveomics/enveomics.R/man/enve.recplot2.seqdepth.Rd +27 -0
- data/utils/enveomics/enveomics.R/man/enve.recplot2.windowDepthThreshold.Rd +36 -0
- data/utils/enveomics/enveomics.R/man/enve.selvector.Rd +23 -0
- data/utils/enveomics/enveomics.R/man/enve.tribs.Rd +68 -0
- data/utils/enveomics/enveomics.R/man/enve.tribs.test.Rd +28 -0
- data/utils/enveomics/enveomics.R/man/enve.truncate.Rd +27 -0
- data/utils/enveomics/enveomics.R/man/growth.curves.Rd +14 -0
- data/utils/enveomics/enveomics.R/man/phyla.counts.Rd +13 -0
- data/utils/enveomics/enveomics.R/man/plot.enve.GrowthCurve.Rd +78 -0
- data/utils/enveomics/enveomics.R/man/plot.enve.TRIBS.Rd +46 -0
- data/utils/enveomics/enveomics.R/man/plot.enve.TRIBStest.Rd +45 -0
- data/utils/enveomics/enveomics.R/man/plot.enve.recplot2.Rd +125 -0
- data/utils/enveomics/enveomics.R/man/summary.enve.GrowthCurve.Rd +19 -0
- data/utils/enveomics/enveomics.R/man/summary.enve.TRIBS.Rd +19 -0
- data/utils/enveomics/enveomics.R/man/summary.enve.TRIBStest.Rd +19 -0
- data/utils/enveomics/globals.mk +8 -0
- data/utils/enveomics/manifest.json +9 -0
- data/utils/multitrim/Multitrim How-To.pdf +0 -0
- data/utils/multitrim/README.md +67 -0
- data/utils/multitrim/multitrim.py +1555 -0
- data/utils/multitrim/multitrim.yml +13 -0
- data/utils/requirements.txt +4 -3
- metadata +304 -3
@@ -0,0 +1,48 @@
|
|
1
|
+
#!/usr/bin/env Rscript
|
2
|
+
|
3
|
+
# @author Luis M. Rodriguez-R
|
4
|
+
# @license Artistic-2.0
|
5
|
+
|
6
|
+
#= Load stuff
|
7
|
+
suppressPackageStartupMessages(library(enveomics.R))
|
8
|
+
args <- commandArgs(trailingOnly = FALSE)
|
9
|
+
enveomics_R <- file.path(dirname(
|
10
|
+
sub("^--file=", "", args[grep("^--file=", args)])),
|
11
|
+
"lib", "enveomics.R")
|
12
|
+
|
13
|
+
#= Generate interface
|
14
|
+
opt <- enve.cliopts(enve.recplot2,
|
15
|
+
file.path(enveomics_R, "man", "enve.recplot2.Rd"),
|
16
|
+
positional_arguments=c(1,4),
|
17
|
+
usage="usage: %prog [options] output.Rdata [output.pdf [width height]]",
|
18
|
+
mandatory=c("prefix"),
|
19
|
+
o_desc=list(pos.breaks="Breaks in the positions histogram.",
|
20
|
+
pos.breaks.tsv="File with (absolute) coordinates of breaks in the position histogram",
|
21
|
+
id.breaks="Breaks in the identity histogram.",
|
22
|
+
id.summary="Function summarizing the identity bins. By default: sum.",
|
23
|
+
peaks.col="Color of peaks, mandatory for peak-finding (e.g., darkred).",
|
24
|
+
peaks.method="Method to detect peaks; one of emauto, em, or mower."),
|
25
|
+
p_desc=paste("","Produce recruitment plot objects provided that",
|
26
|
+
"BlastTab.catsbj.pl has been previously executed.", sep="\n\t"),
|
27
|
+
ignore=c("plot"),
|
28
|
+
defaults=c(pos.breaks.tsv=NA, id.metric="identity", peaks.col=NA,
|
29
|
+
peaks.method="emauto"))
|
30
|
+
|
31
|
+
#= Run it!
|
32
|
+
if(length(opt$args)>1){
|
33
|
+
args = as.list(opt$args[-1])
|
34
|
+
for(i in 2:3) if(length(args)>=i) args[[i]] <- as.numeric(args[[i]])
|
35
|
+
do.call("pdf", args)
|
36
|
+
}else{
|
37
|
+
opt$options[["plot"]] <- FALSE
|
38
|
+
}
|
39
|
+
pc <- opt$options[["peaks.col"]]
|
40
|
+
if(!is.na(pc) && pc=="NA") opt$options[["peaks.col"]] <- NA
|
41
|
+
if(!is.null(opt$options[["peaks.method"]])){
|
42
|
+
opt$options[["peaks.opts"]] <- list(method=opt$options[["peaks.method"]])
|
43
|
+
opt$options[["peaks.method"]] <- NULL
|
44
|
+
}
|
45
|
+
rp <- do.call("enve.recplot2", opt$options)
|
46
|
+
save(rp, file=opt$args[1])
|
47
|
+
if(length(opt$args)>1) dev.off()
|
48
|
+
|
@@ -0,0 +1,86 @@
|
|
1
|
+
#!/usr/bin/env perl
|
2
|
+
#
|
3
|
+
# @author: Luis M Rodriguez-R <lmrodriguezr at gmail dot com>
|
4
|
+
# @license: artistic license 2.0
|
5
|
+
# @update: Mar-23-2015
|
6
|
+
#
|
7
|
+
|
8
|
+
use strict;
|
9
|
+
use warnings;
|
10
|
+
use List::Util qw/min max sum/;
|
11
|
+
|
12
|
+
my $fna = shift @ARGV;
|
13
|
+
$fna or die "
|
14
|
+
Usage:
|
15
|
+
cat blast1... | $0 genes_or_ctgs.fna > genes_or_ctgs.cov
|
16
|
+
|
17
|
+
blast1... One or more Tabular BLAST files of reads vs genes (or contigs).
|
18
|
+
genes_or_ctgs.fna A FastA file containing the genes or the contigs (db).
|
19
|
+
genes_or_ctgs.cov The output file.
|
20
|
+
|
21
|
+
Output:
|
22
|
+
A tab-delimited file with the following columns:
|
23
|
+
1. Subject ID
|
24
|
+
2. Average sequencing depth
|
25
|
+
3. Median sequencing depth
|
26
|
+
4. Number of mapped reads
|
27
|
+
5. Length of the subject sequence
|
28
|
+
|
29
|
+
";
|
30
|
+
|
31
|
+
my $size = {};
|
32
|
+
my $gene = {};
|
33
|
+
my $reads = {};
|
34
|
+
|
35
|
+
SIZE:{
|
36
|
+
local $/=">";
|
37
|
+
print STDERR "== Reading fasta\n";
|
38
|
+
open FNA, "<", $fna or die "Cannot read the file: $fna: $!\n";
|
39
|
+
my $i=0;
|
40
|
+
while(<FNA>){
|
41
|
+
chomp;
|
42
|
+
my @g = split /\n/, $_, 2;
|
43
|
+
next unless $g[1];
|
44
|
+
#$g[1] =~ s/[^A-Za-z]//g;
|
45
|
+
#$size->{$g[0]} = length $g[1];
|
46
|
+
$g[0] =~ s/\s.*//;
|
47
|
+
$size->{$g[0]} = ( $g[1] =~ tr/[A-Za-z]// );
|
48
|
+
print STDERR " Measuring sequence ".($i).": $g[0] \r" unless ++$i%500;
|
49
|
+
}
|
50
|
+
close FNA;
|
51
|
+
print STDERR " Found $i sequences".(" "x30)."\n";
|
52
|
+
}
|
53
|
+
|
54
|
+
MAP:{
|
55
|
+
print STDERR "== Reading mapping\n";
|
56
|
+
my $i=0;
|
57
|
+
while(<>){
|
58
|
+
my @ln = split /\t/;
|
59
|
+
$gene->{$ln[1]} ||= [];
|
60
|
+
for my $pos (min($ln[8], $ln[9]) .. max($ln[8], $ln[9])){ ($gene->{$ln[1]}->[$pos]||=0)++ }
|
61
|
+
($reads->{$ln[1]} ||= 0)++;
|
62
|
+
print STDERR " Saving hit ".($i).": $ln[1] \r" unless ++$i%5000;
|
63
|
+
}
|
64
|
+
print STDERR " Found $i hits".(" "x30)."\n";
|
65
|
+
}
|
66
|
+
|
67
|
+
OUT:{
|
68
|
+
print STDERR "== Creating output\n";
|
69
|
+
my $i=0;
|
70
|
+
for my $g (keys %$gene){
|
71
|
+
$gene->{$g}->[$_] ||= 0 for (0 .. $size->{$g});
|
72
|
+
my @sorted = sort {$a <=> $b} @{$gene->{$g}};
|
73
|
+
die "Cannot find gene in $fna: $g.\n" unless exists $size->{$g};
|
74
|
+
printf "%s\t%.6f\t%d\t%d\t%d\n", $g,
|
75
|
+
sum(@{$gene->{$g}})/$size->{$g},
|
76
|
+
$sorted[$#sorted/2],
|
77
|
+
$reads->{$g},
|
78
|
+
$size->{$g};
|
79
|
+
delete $gene->{$g};
|
80
|
+
print STDERR " Saving sequence $g:".($i)."\r" unless ++$i%500;
|
81
|
+
}
|
82
|
+
print STDERR " Saved $i sequences".(" "x30)."\n";
|
83
|
+
}
|
84
|
+
|
85
|
+
print STDERR " done.\n";
|
86
|
+
|
@@ -0,0 +1,119 @@
|
|
1
|
+
#!/usr/bin/env perl
|
2
|
+
#
|
3
|
+
# @author: Luis M Rodriguez-R <lmrodriguezr at gmail dot com>
|
4
|
+
# @license: artistic license 2.0
|
5
|
+
# @update: Mar-23-2015
|
6
|
+
#
|
7
|
+
|
8
|
+
use strict;
|
9
|
+
use warnings;
|
10
|
+
use List::Util qw/min max sum/;
|
11
|
+
|
12
|
+
my $fna = shift @ARGV;
|
13
|
+
$fna or die "
|
14
|
+
Description:
|
15
|
+
Estimates the average sequencing depth of subject sequences (genes or contigs)
|
16
|
+
assuming a Zero-Inflated Poisson distribution (ZIP) to correct for non-covered
|
17
|
+
positions. It uses the corrected method of moments estimators (CMMEs) as described
|
18
|
+
by Beckett et al [1]. Note that [1] has a mistake in eq. (2.4), that should be:
|
19
|
+
pi-hat-MM = 1 - (X-bar / lambda-hat-MM)
|
20
|
+
|
21
|
+
Also note that a more elaborated mixture distribution can arise from coverage
|
22
|
+
histograms (e.g., see [2] for an additional correction called 'tail distribution'
|
23
|
+
and mixtures involving negative binomial) so take these results cum grano salis.
|
24
|
+
|
25
|
+
Usage:
|
26
|
+
cat blast1... | $0 genes_or_ctgs.fna > genes_or_ctgs.cov
|
27
|
+
|
28
|
+
blast1... One or more Tabular BLAST files of reads vs genes (or contigs).
|
29
|
+
genes_or_ctgs.fna A FastA file containing the genes or the contigs (db).
|
30
|
+
genes_or_ctgs.cov The output file.
|
31
|
+
|
32
|
+
Output:
|
33
|
+
A tab-delimited file with the following columns (the one you want is #2):
|
34
|
+
1. Subject ID
|
35
|
+
2. Estimated average sequencing depth (CMME lambda)
|
36
|
+
3. Zero-inflation (CMME pi)
|
37
|
+
4. Observed average sequencing depth
|
38
|
+
5. Observed median sequencing depth
|
39
|
+
6. Observed median sequencing depth excluding zeroes
|
40
|
+
7. Number of mapped reads
|
41
|
+
8. Length of the subject sequence
|
42
|
+
|
43
|
+
References:
|
44
|
+
[1] http://anisette.ucs.louisiana.edu/Academic/Sciences/MATH/stage/stat2012.pdf
|
45
|
+
[2] Lindner et al, Bioinformatics, 2013.
|
46
|
+
|
47
|
+
";
|
48
|
+
|
49
|
+
my $size = {};
|
50
|
+
my $gene = {};
|
51
|
+
my $reads = {};
|
52
|
+
|
53
|
+
SIZE:{
|
54
|
+
local $/=">";
|
55
|
+
print STDERR "== Reading fasta\n";
|
56
|
+
open FNA, "<", $fna or die "Cannot read the file: $fna: $!\n";
|
57
|
+
my $i=0;
|
58
|
+
while(<FNA>){
|
59
|
+
chomp;
|
60
|
+
my @g = split /\n/, $_, 2;
|
61
|
+
next unless $g[1];
|
62
|
+
#$g[1] =~ s/[^A-Za-z]//g;
|
63
|
+
#$size->{$g[0]} = length $g[1];
|
64
|
+
$g[0] =~ s/\s.*//;
|
65
|
+
$size->{$g[0]} = ( $g[1] =~ tr/[A-Za-z]// );
|
66
|
+
print STDERR " Measuring sequence ".($i).": $g[0] \r" unless ++$i%500;
|
67
|
+
}
|
68
|
+
close FNA;
|
69
|
+
print STDERR " Found $i sequences".(" "x30)."\n";
|
70
|
+
}
|
71
|
+
|
72
|
+
MAP:{
|
73
|
+
print STDERR "== Reading mapping\n";
|
74
|
+
my $i=0;
|
75
|
+
while(<>){
|
76
|
+
my @ln = split /\t/;
|
77
|
+
$gene->{$ln[1]} ||= [];
|
78
|
+
for my $pos (min($ln[8], $ln[9]) .. max($ln[8], $ln[9])){ ($gene->{$ln[1]}->[$pos]||=0)++ }
|
79
|
+
($reads->{$ln[1]} ||= 0)++;
|
80
|
+
print STDERR " Saving hit ".($i).": $ln[1] \r" unless ++$i%5000;
|
81
|
+
}
|
82
|
+
print STDERR " Found $i hits".(" "x30)."\n";
|
83
|
+
}
|
84
|
+
|
85
|
+
OUT:{
|
86
|
+
print STDERR "== Creating output\n";
|
87
|
+
my $i=0;
|
88
|
+
for my $g (keys %$gene){
|
89
|
+
unless(exists $size->{$g}){
|
90
|
+
warn "Warning: Cannot find gene in $fna: $g.\n";
|
91
|
+
next;
|
92
|
+
}
|
93
|
+
$gene->{$g}->[$_] ||= 0 for (0 .. $size->{$g});
|
94
|
+
die "Hits out-of-boundaries in gene $g: $#{$gene->{$g}} != $size->{$g}.\n" if $#{$gene->{$g}} != $size->{$g};
|
95
|
+
my @sorted = sort {$a <=> $b} @{$gene->{$g}};
|
96
|
+
my @sorted_nz = grep { $_>0 } @sorted;
|
97
|
+
my $xbar = sum(@{$gene->{$g}})/$size->{$g};
|
98
|
+
my $xsqbar = sum(map { ($_ - $xbar)**2 } @{$gene->{$g}})/($size->{$g}-1);
|
99
|
+
my $var = $xsqbar - $xbar**2;
|
100
|
+
my $lambdaMM = $xbar + ($var/$xbar) - 1;
|
101
|
+
my $piMM = $lambdaMM==0 ? 0 : 1 - $xbar/$lambdaMM;
|
102
|
+
printf "%s\t%.6f\t%.6f\t%.6f\t%d\t%d\t%d\t%d\n", $g,
|
103
|
+
($xbar >= $var ? $xbar : $lambdaMM),
|
104
|
+
($xbar >= $var ? 0 : $piMM),
|
105
|
+
#$lambdaMM,
|
106
|
+
#$piMM,
|
107
|
+
sum(@{$gene->{$g}})/$size->{$g},
|
108
|
+
$sorted[$#sorted/2],
|
109
|
+
$sorted_nz[$#sorted_nz/2],
|
110
|
+
$reads->{$g},
|
111
|
+
$size->{$g};
|
112
|
+
delete $gene->{$g};
|
113
|
+
print STDERR " Saving sequence $g:".($i)." \r" unless ++$i%500;
|
114
|
+
}
|
115
|
+
print STDERR " Saved $i sequences".(" "x30)." \n";
|
116
|
+
}
|
117
|
+
|
118
|
+
print STDERR " done.\n";
|
119
|
+
|
@@ -0,0 +1,86 @@
|
|
1
|
+
#!/usr/bin/env perl
|
2
|
+
#
|
3
|
+
# @author: Luis M Rodriguez-R <lmrodriguezr at gmail dot com>
|
4
|
+
# @license: artistic license 2.0
|
5
|
+
# @update: Mar-23-2015
|
6
|
+
#
|
7
|
+
|
8
|
+
use strict;
|
9
|
+
use warnings;
|
10
|
+
use List::Util qw/min max sum/;
|
11
|
+
|
12
|
+
my $fna = shift @ARGV;
|
13
|
+
$fna or die "
|
14
|
+
Usage:
|
15
|
+
cat blast1... | $0 genes_or_ctgs.fna > genes_or_ctgs.cov
|
16
|
+
|
17
|
+
blast1... One or more Tabular BLAST files of reads vs genes (or contigs).
|
18
|
+
genes_or_ctgs.fna A FastA file containing the genes or the contigs (db).
|
19
|
+
genes_or_ctgs.cov The output file.
|
20
|
+
|
21
|
+
Output:
|
22
|
+
A tab-delimited file with the following columns:
|
23
|
+
1. Subject ID
|
24
|
+
2. Average sequencing depth
|
25
|
+
3. Number of mapped reads
|
26
|
+
4. Length of the subject sequence
|
27
|
+
|
28
|
+
Note:
|
29
|
+
The values reported by this script may differ from those of BlastTab.seqdepth.pl,
|
30
|
+
because this script uses the aligned length of the read while BlastTab.seqdepth.pl
|
31
|
+
uses the aligned length of the subject sequence.
|
32
|
+
|
33
|
+
";
|
34
|
+
|
35
|
+
my $size = {};
|
36
|
+
my $gene = {};
|
37
|
+
my $reads = {};
|
38
|
+
|
39
|
+
SIZE:{
|
40
|
+
local $/=">";
|
41
|
+
print STDERR "== Reading fasta\n";
|
42
|
+
open FNA, "<", $fna or die "Cannot read the file: $fna: $!\n";
|
43
|
+
my $i=0;
|
44
|
+
while(<FNA>){
|
45
|
+
chomp;
|
46
|
+
my @g = split /\n/, $_, 2;
|
47
|
+
next unless $g[1];
|
48
|
+
#$g[1] =~ s/[^A-Za-z]//g;
|
49
|
+
#$size->{$g[0]} = length $g[1];
|
50
|
+
$g[0] =~ s/\s.*//;
|
51
|
+
$size->{$g[0]} = ( $g[1] =~ tr/[A-Za-z]// );
|
52
|
+
print STDERR " Measuring sequence ".($i).": $g[0] \r" unless ++$i%500;
|
53
|
+
}
|
54
|
+
close FNA;
|
55
|
+
print STDERR " Found $i sequences".(" "x30)."\n";
|
56
|
+
}
|
57
|
+
|
58
|
+
MAP:{
|
59
|
+
print STDERR "== Reading mapping\n";
|
60
|
+
my $i=0;
|
61
|
+
while(<>){
|
62
|
+
my @ln = split /\t/;
|
63
|
+
$gene->{$ln[1]} ||= 0;
|
64
|
+
$gene->{$ln[1]} += abs($ln[6]-$ln[7])+1;
|
65
|
+
($reads->{$ln[1]} ||= 0)++;
|
66
|
+
print STDERR " Saving hit ".($i).": $ln[1] \r" unless ++$i%5000;
|
67
|
+
}
|
68
|
+
print STDERR " Found $i hits".(" "x30)."\n";
|
69
|
+
}
|
70
|
+
|
71
|
+
OUT:{
|
72
|
+
print STDERR "== Creating output\n";
|
73
|
+
my $i=0;
|
74
|
+
for my $g (keys %$gene){
|
75
|
+
die "Cannot find gene in $fna: $g.\n" unless exists $size->{$g};
|
76
|
+
printf "%s\t%.6f\t%d\t%d\n", $g,
|
77
|
+
$gene->{$g}/$size->{$g},
|
78
|
+
$reads->{$g},
|
79
|
+
$size->{$g};
|
80
|
+
print STDERR " Saving sequence $g:".($i)."\r" unless ++$i%500;
|
81
|
+
}
|
82
|
+
print STDERR " Saved $i sequences".(" "x30)."\n";
|
83
|
+
}
|
84
|
+
|
85
|
+
print STDERR " done.\n";
|
86
|
+
|
@@ -0,0 +1,47 @@
|
|
1
|
+
#!/usr/bin/env perl
|
2
|
+
#
|
3
|
+
# @author Luis M Rodriguez-R <lmrodriguezr at gmail dot com>
|
4
|
+
# @license artistic license 2.0
|
5
|
+
# @update Mar-23-2015
|
6
|
+
#
|
7
|
+
|
8
|
+
use strict;
|
9
|
+
use warnings;
|
10
|
+
|
11
|
+
my($blast, $fasta) = @ARGV;
|
12
|
+
($blast and $fasta) or die "
|
13
|
+
Description:
|
14
|
+
Filters a BLAST output including only the hits produced by
|
15
|
+
any of the given sequences as query.
|
16
|
+
|
17
|
+
Usage:
|
18
|
+
$0 blast.tab sample.fa > out.tab
|
19
|
+
|
20
|
+
blast.tab BLAST output to be filtered (tabular format).
|
21
|
+
sample.fa Sequences to use as query.
|
22
|
+
out.tab The filtered BLAST output (tabular format).
|
23
|
+
|
24
|
+
";
|
25
|
+
|
26
|
+
print STDERR "== Reading sequences\n";
|
27
|
+
my $seq = {};
|
28
|
+
open FASTA, "<", $fasta or die "Cannot read the file: $fasta: $!\n";
|
29
|
+
while(<FASTA>){
|
30
|
+
next unless /^>(\S+)/;
|
31
|
+
$seq->{$1} = 1;
|
32
|
+
}
|
33
|
+
close FASTA;
|
34
|
+
print STDERR " ".(scalar keys %$seq)." sequences to be used as query.\n";
|
35
|
+
|
36
|
+
print STDERR "== Reading BLAST\n";
|
37
|
+
my ($N,$n)=(0,0);
|
38
|
+
open BLAST, "<", $blast or die "Cannot read the file: $blast: $!\n";
|
39
|
+
while(my $ln = <BLAST>){
|
40
|
+
next if $ln=~/^#/;
|
41
|
+
$N++; my ($qry) = split /\t/, $ln;
|
42
|
+
next unless exists $seq->{$qry};
|
43
|
+
$n++; print $ln;
|
44
|
+
}
|
45
|
+
close BLAST;
|
46
|
+
print STDERR " Reported $n entries out of $N.\n";
|
47
|
+
|
@@ -0,0 +1,114 @@
|
|
1
|
+
#!/usr/bin/env perl
|
2
|
+
#
|
3
|
+
# @author Luis M. Rodriguez-R <lmrodriguezr at gmail dot com>
|
4
|
+
# @update Mar-23-2016
|
5
|
+
# @license artistic license 2.0
|
6
|
+
#
|
7
|
+
|
8
|
+
use warnings;
|
9
|
+
use strict;
|
10
|
+
use Getopt::Std;
|
11
|
+
|
12
|
+
sub HELP_MESSAGE {
|
13
|
+
die "
|
14
|
+
.Description
|
15
|
+
Sums the weights of all the queries hitting each subject. Often (but not
|
16
|
+
necessarily) the BLAST files contain only best matches. The weights can be
|
17
|
+
any number, but a common use of this Script is to add up counts (weights are
|
18
|
+
integers). For example, in a BLAST of predicted genes vs some annotation
|
19
|
+
source, the weights could be the number of reads recruited by each gene.
|
20
|
+
|
21
|
+
.Usage:
|
22
|
+
$0 [options] blast... > out-file
|
23
|
+
|
24
|
+
blast... * One or more BLAST files.
|
25
|
+
out-file A two-columns tab-delimited file containing the summed weights
|
26
|
+
per hit.
|
27
|
+
|
28
|
+
-w <str> Weights file: A two-columns tab-delimited file containing the
|
29
|
+
name (column 1) and the weight (column 2) of each query.
|
30
|
+
-s <float> Minimum score. By default: 0.
|
31
|
+
-i <float> Minimum identity (in percentage). By default: 0.
|
32
|
+
-m <int> Maximum number of queries. Set to 0 for all. By default: 0.
|
33
|
+
-n Normalize weights by the number of hits per query.
|
34
|
+
-z Add zero when weight is not found (by default: doesn't list
|
35
|
+
them).
|
36
|
+
-q Run quietly.
|
37
|
+
-h Display this message and exit.
|
38
|
+
|
39
|
+
* Mandatory
|
40
|
+
|
41
|
+
.Note:
|
42
|
+
The weights (-w parameter) are optional, but its use is encouraged. When
|
43
|
+
weights are not passed, the script simply assumes all queries to be equally
|
44
|
+
weighted (unity), a result that can be faster to compute with, for example:
|
45
|
+
cat blast | cut -f 2 | sort | uniq -c | awk '{print \$2\"\\t\"\$1}' > out
|
46
|
+
It is equivalent to simply count the number of times that each subject
|
47
|
+
occurs.
|
48
|
+
"
|
49
|
+
}
|
50
|
+
|
51
|
+
my %o = ();
|
52
|
+
getopts('w:s:i:m:znqh', \%o);
|
53
|
+
$o{h} and &HELP_MESSAGE;
|
54
|
+
$o{s}||=0;
|
55
|
+
$o{i}||=0;
|
56
|
+
$o{m}||=0;
|
57
|
+
|
58
|
+
my %count;
|
59
|
+
if($o{w}){
|
60
|
+
print STDERR "Reading counts.\n" unless $o{q};
|
61
|
+
open COUNT, "<", $o{w} or die "Cannot open file: $o{w}: $!\n";
|
62
|
+
%count = map {split /\t/} <COUNT>;
|
63
|
+
close COUNT;
|
64
|
+
}
|
65
|
+
|
66
|
+
print STDERR "Reading BLASTs.\n" unless $o{q};
|
67
|
+
my $qry = '';
|
68
|
+
my $hits = 0;
|
69
|
+
my @buf = ();
|
70
|
+
my $qries = 0;
|
71
|
+
my $noQry = 0;
|
72
|
+
my $ln1 = 0;
|
73
|
+
my %out = ();
|
74
|
+
BFILE: for my $blast (@ARGV){
|
75
|
+
print STDERR " o $blast\n" unless $o{q};
|
76
|
+
open BLAST, "<", $blast or die "Cannot open file: $blast: $!\n";
|
77
|
+
BLINE: while(<BLAST>){
|
78
|
+
chomp;
|
79
|
+
my @ln = split /\t/;
|
80
|
+
$ln1 ||= $#ln;
|
81
|
+
die "Bad line $.: $_\n" unless $#ln==$ln1;
|
82
|
+
next if ($o{s} and $ln[11]<$o{s}) or ($o{i} and $ln[2]<$o{i});
|
83
|
+
unless(exists $count{$ln[0]}){
|
84
|
+
$noQry++;
|
85
|
+
if(not $o{w}){
|
86
|
+
$count{$ln[0]}=1;
|
87
|
+
}elsif($o{z}){
|
88
|
+
$count{$ln[0]}=0;
|
89
|
+
}else{
|
90
|
+
next BLINE;
|
91
|
+
}
|
92
|
+
}
|
93
|
+
|
94
|
+
if($qry ne $ln[0]){
|
95
|
+
$qries++;
|
96
|
+
($out{$_->[0]}||=0) += ($_->[1]/($o{n}?$hits:1)) for @buf;
|
97
|
+
last BFILE if $o{m} and $qries >= $o{m};
|
98
|
+
@buf = ();
|
99
|
+
$qry = $ln[0];
|
100
|
+
$hits = 0;
|
101
|
+
}
|
102
|
+
|
103
|
+
push @buf, [$ln[1], $count{$ln[0]}];
|
104
|
+
$hits++;
|
105
|
+
}
|
106
|
+
($out{$_->[0]}||=0) += ($_->[1]/($o{n}?$hits:1)) for @buf;
|
107
|
+
close BLAST;
|
108
|
+
}
|
109
|
+
print STDERR "Warning: Couldn't find $noQry queries\n" if $noQry and $o{w};
|
110
|
+
|
111
|
+
for my $h (keys %out){
|
112
|
+
print "$h\t".$out{$h}."\n";
|
113
|
+
}
|
114
|
+
|