treesak 1.51.2__py3-none-any.whl
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.
Potentially problematic release.
This version of treesak might be problematic. Click here for more details.
- TreeSAK/ALE.py +63 -0
- TreeSAK/ALE1.py +268 -0
- TreeSAK/ALE2.py +168 -0
- TreeSAK/ALE2RTC.py +30 -0
- TreeSAK/ALE3.py +205 -0
- TreeSAK/ALE4.py +636 -0
- TreeSAK/ALE5.py +210 -0
- TreeSAK/ALE6.py +401 -0
- TreeSAK/ALE7.py +126 -0
- TreeSAK/ALE_backup.py +1081 -0
- TreeSAK/AssessCVG.py +128 -0
- TreeSAK/AssessMarker.py +306 -0
- TreeSAK/AssessMarkerDeltaLL.py +257 -0
- TreeSAK/AssessMarkerPA.py +317 -0
- TreeSAK/AssessPB.py +130 -0
- TreeSAK/BMGE.jar +0 -0
- TreeSAK/BMGE.py +49 -0
- TreeSAK/CompareMCMC.py +138 -0
- TreeSAK/ConcateMSA.py +111 -0
- TreeSAK/ConvertMSA.py +135 -0
- TreeSAK/Dir.rb +82 -0
- TreeSAK/ExtractMarkerSeq.py +263 -0
- TreeSAK/FastRoot.py +1175 -0
- TreeSAK/FastRoot_backup.py +1122 -0
- TreeSAK/FigTree.py +34 -0
- TreeSAK/GTDB_tree.py +76 -0
- TreeSAK/GeneTree.py +142 -0
- TreeSAK/KEGG_Luo17.py +807 -0
- TreeSAK/LcaToLeaves.py +66 -0
- TreeSAK/MarkerRef2Tree.py +616 -0
- TreeSAK/MarkerRef2Tree_backup.py +628 -0
- TreeSAK/MarkerSeq2Tree.py +290 -0
- TreeSAK/MarkerSeq2Tree_backup.py +259 -0
- TreeSAK/ModifyTopo.py +116 -0
- TreeSAK/Newick_tree_plotter.py +79 -0
- TreeSAK/OMA.py +170 -0
- TreeSAK/OMA2.py +212 -0
- TreeSAK/OneLineAln.py +50 -0
- TreeSAK/PB.py +155 -0
- TreeSAK/PMSF.py +106 -0
- TreeSAK/PhyloBiAssoc.R +84 -0
- TreeSAK/PhyloBiAssoc.py +167 -0
- TreeSAK/PlotMCMC.py +41 -0
- TreeSAK/PlotMcmcNode.py +152 -0
- TreeSAK/PlotMcmcNode_old.py +252 -0
- TreeSAK/RootTree.py +101 -0
- TreeSAK/RootTreeGTDB214.py +288 -0
- TreeSAK/RootTreeGTDB220.py +300 -0
- TreeSAK/RootTreeGTDB226.py +300 -0
- TreeSAK/SequentialDating.py +16 -0
- TreeSAK/SingleAleHGT.py +157 -0
- TreeSAK/SingleLinePhy.py +50 -0
- TreeSAK/SliceMSA.py +142 -0
- TreeSAK/SplitScore.py +19 -0
- TreeSAK/SplitScore1.py +178 -0
- TreeSAK/SplitScore1OMA.py +148 -0
- TreeSAK/SplitScore2.py +597 -0
- TreeSAK/TaxaCountStats.R +256 -0
- TreeSAK/TaxonTree.py +47 -0
- TreeSAK/TreeSAK_config.py +32 -0
- TreeSAK/VERSION +158 -0
- TreeSAK/VisHPD95.R +45 -0
- TreeSAK/VisHPD95.py +200 -0
- TreeSAK/__init__.py +0 -0
- TreeSAK/ale_parser.py +74 -0
- TreeSAK/ale_splitter.py +63 -0
- TreeSAK/alignment_pruner.pl +1471 -0
- TreeSAK/assessOG.py +45 -0
- TreeSAK/catfasta2phy.py +140 -0
- TreeSAK/cogTree.py +185 -0
- TreeSAK/compare_trees.R +30 -0
- TreeSAK/compare_trees.py +255 -0
- TreeSAK/dating.py +264 -0
- TreeSAK/dating_ss.py +361 -0
- TreeSAK/deltall.py +82 -0
- TreeSAK/do_rrtc.rb +464 -0
- TreeSAK/fa2phy.py +42 -0
- TreeSAK/format_leaf_name.py +70 -0
- TreeSAK/gap_stats.py +38 -0
- TreeSAK/get_SCG_tree.py +742 -0
- TreeSAK/get_arCOG_seq.py +97 -0
- TreeSAK/global_functions.py +222 -0
- TreeSAK/gnm_leaves.py +43 -0
- TreeSAK/iTOL.py +791 -0
- TreeSAK/iTOL_gene_tree.py +80 -0
- TreeSAK/itol_msa_stats.py +56 -0
- TreeSAK/keep_highest_rrtc.py +37 -0
- TreeSAK/koTree.py +194 -0
- TreeSAK/label_tree.R +75 -0
- TreeSAK/label_tree.py +121 -0
- TreeSAK/mad.py +708 -0
- TreeSAK/mcmc2tree.py +58 -0
- TreeSAK/mcmcTC copy.py +92 -0
- TreeSAK/mcmcTC.py +104 -0
- TreeSAK/mcmctree_vs_reltime.R +44 -0
- TreeSAK/mcmctree_vs_reltime.py +252 -0
- TreeSAK/merge_pdf.py +32 -0
- TreeSAK/pRTC.py +56 -0
- TreeSAK/parse_mcmctree.py +198 -0
- TreeSAK/parse_reltime.py +141 -0
- TreeSAK/phy2fa.py +37 -0
- TreeSAK/plot_distruibution_th.py +165 -0
- TreeSAK/prep_mcmctree_ctl.py +92 -0
- TreeSAK/print_leaves.py +32 -0
- TreeSAK/pruneMSA.py +63 -0
- TreeSAK/recode.py +73 -0
- TreeSAK/remove_bias.R +112 -0
- TreeSAK/rename_leaves.py +77 -0
- TreeSAK/replace_clade.py +55 -0
- TreeSAK/root_with_out_group.py +84 -0
- TreeSAK/run_TaxaCountStats_R_s1.py +455 -0
- TreeSAK/subsample_drep_gnms.py +74 -0
- TreeSAK/subset.py +69 -0
- TreeSAK/subset_tree_stupid_old_way.py +193 -0
- TreeSAK/supertree.py +330 -0
- TreeSAK/tmp_1.py +19 -0
- TreeSAK/tmp_2.py +19 -0
- TreeSAK/tmp_3.py +120 -0
- TreeSAK/weighted_rand.rb +23 -0
- treesak-1.51.2.data/scripts/TreeSAK +950 -0
- treesak-1.51.2.dist-info/LICENSE +674 -0
- treesak-1.51.2.dist-info/METADATA +27 -0
- treesak-1.51.2.dist-info/RECORD +125 -0
- treesak-1.51.2.dist-info/WHEEL +5 -0
- treesak-1.51.2.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,950 @@
|
|
|
1
|
+
#!python
|
|
2
|
+
|
|
3
|
+
# Copyright (C) 2017, Weizhi Song.
|
|
4
|
+
# songwz03@gmail.com
|
|
5
|
+
|
|
6
|
+
# TreeSAK is free software: you can redistribute it and/or modify
|
|
7
|
+
# it under the terms of the GNU Affero General Public License as published by
|
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
|
9
|
+
# (at your option) any later version.
|
|
10
|
+
|
|
11
|
+
# TreeSAK is distributed in the hope that it will be useful,
|
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
14
|
+
# GNU Affero General Public License for more details.
|
|
15
|
+
|
|
16
|
+
# You should have received a copy of the GNU Affero General Public License
|
|
17
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
18
|
+
|
|
19
|
+
import sys
|
|
20
|
+
import warnings
|
|
21
|
+
import argparse
|
|
22
|
+
from TreeSAK.TreeSAK_config import config_dict
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def version(config_dict):
|
|
26
|
+
version_file = open('%s/VERSION' % config_dict['config_file_path'])
|
|
27
|
+
return version_file.readline().strip()
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def print_main_help():
|
|
31
|
+
|
|
32
|
+
help_message = '''
|
|
33
|
+
...::: TreeSAK v%s :::...
|
|
34
|
+
|
|
35
|
+
Marker-related
|
|
36
|
+
ExtractMarkerSeq -> Extract marker by blastn
|
|
37
|
+
deltall -> Parse stdout of deltaLL.rb
|
|
38
|
+
get_arCOG_seq -> Retrieve arCOG sequences
|
|
39
|
+
AssessMarkerPA -> Assess Markers by P/A among groups
|
|
40
|
+
SplitScore -> Assess markers by split score
|
|
41
|
+
AssessMarkerDeltaLL -> Assess Markers by DeltaLL
|
|
42
|
+
OMA -> Prepare input files for running OMA
|
|
43
|
+
OMA2 -> Filter OMA predicted OGs
|
|
44
|
+
|
|
45
|
+
Multiple Sequence Alignment
|
|
46
|
+
BMGE -> Run BMGE
|
|
47
|
+
pruneMSA -> Prune MSA with alignment_pruner.pl
|
|
48
|
+
recodeAA -> Recode amino acids to Dayoff 4, Dayoff 6 or SR4 categories
|
|
49
|
+
fa2phy -> Convert MSA format (fasta to phylip)
|
|
50
|
+
phy2fa -> Convert MSA format (phylip to fasta)
|
|
51
|
+
SliceMSA -> Slice MSA by column
|
|
52
|
+
ConcateMSA -> Concatenate MSAs
|
|
53
|
+
ConvertMSA -> Convert MSA format
|
|
54
|
+
OneLineAln -> One-line fasta format alignments
|
|
55
|
+
SingleLinePhy -> Put sequences in single line in phylip format
|
|
56
|
+
CS_trim -> (to be added) perform chi-squared trimming to reduce compositional heterogeneity
|
|
57
|
+
gap_stats -> The percentage of gap in each sequence of a MSA
|
|
58
|
+
|
|
59
|
+
Tree-related
|
|
60
|
+
iTOL -> Prepare iTOL files
|
|
61
|
+
iTOL_gene_tree -> Genome metadata to gene metadata
|
|
62
|
+
iTOL_msa_stats -> iTOL_msa_stats
|
|
63
|
+
PB -> Infer tree with PhyloBayes-MPI
|
|
64
|
+
supertree -> Infer species tree from multiple gene trees
|
|
65
|
+
AssessPB -> Compare PhyloBayes chains
|
|
66
|
+
MarkerSeq2Tree -> Marker sequence to tree
|
|
67
|
+
MarkerRef2Tree -> Marker (reference sequence) to Tree
|
|
68
|
+
GTDB_tree -> Get GTDB tree
|
|
69
|
+
subset -> Subset tree
|
|
70
|
+
TaxonTree -> Subset GTDB tree by taxon
|
|
71
|
+
compare_trees -> Compare trees with Mantel test
|
|
72
|
+
rename_leaves -> Rename tree leaves
|
|
73
|
+
print_leaves -> print out tree leaves
|
|
74
|
+
FLN -> Format leaf names (e.g. remove spaces in names)
|
|
75
|
+
ModifyTopo -> Modify tree topology
|
|
76
|
+
GeneRax -> (to be added) Run GeneRax
|
|
77
|
+
ALE -> Modules for running ALE
|
|
78
|
+
cogTree -> Infer tree for individual COG function
|
|
79
|
+
koTree -> Infer tree for individual KEGG function
|
|
80
|
+
RootTree -> Root tree with outgroup leaves
|
|
81
|
+
RootTreeGTDB214 -> Root tree by GTDB taxonomy (r214)
|
|
82
|
+
RootTreeGTDB220 -> Root tree by GTDB taxonomy (r220)
|
|
83
|
+
RootTreeGTDB226 -> Root tree by GTDB taxonomy (r226)
|
|
84
|
+
LcaToLeaves -> Get two leaves that define an internal node
|
|
85
|
+
replace_clade -> Replace tree clade
|
|
86
|
+
GeneTree -> Infer gene tree
|
|
87
|
+
|
|
88
|
+
Model-related
|
|
89
|
+
PMSF -> run iqtree with PMSF
|
|
90
|
+
PPA -> (to be added) Perform Posterior Predictive Analysis (across-site)
|
|
91
|
+
|
|
92
|
+
Dating-related
|
|
93
|
+
dating -> Perform molecular dating
|
|
94
|
+
AssessCVG -> Assess dating convergence
|
|
95
|
+
CompareMCMC -> Compare MCMCTree outputs
|
|
96
|
+
PlotMcmcNode -> distribution of node's age estimation
|
|
97
|
+
VisHPD95 -> HPD95 of estimated node age
|
|
98
|
+
pRTC -> Perform probabilistic RTC dating
|
|
99
|
+
mcmcTC -> adding time constraints to mcmctree tree
|
|
100
|
+
mcmc2tree -> get the tree with internal node id from mcmctree output
|
|
101
|
+
|
|
102
|
+
Phylo-related stats
|
|
103
|
+
PhyloBiAssoc -> A wrapper for binaryPGLMM test
|
|
104
|
+
|
|
105
|
+
# Upgrade with: pip3 install --upgrade TreeSAK
|
|
106
|
+
''' % version(config_dict)
|
|
107
|
+
|
|
108
|
+
print(help_message)
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
if __name__ == '__main__':
|
|
112
|
+
|
|
113
|
+
########################################################################################### initialize subparsers ############################################################################################
|
|
114
|
+
|
|
115
|
+
# initialize the options parser
|
|
116
|
+
parser = argparse.ArgumentParser()
|
|
117
|
+
subparsers = parser.add_subparsers(help="--", dest='subparser_name')
|
|
118
|
+
warnings.filterwarnings('ignore')
|
|
119
|
+
|
|
120
|
+
# parse options
|
|
121
|
+
if (len(sys.argv) == 1) or (sys.argv[1] in ['-h', '-H', '-help', '-Help', '--help', '--Help']):
|
|
122
|
+
print_main_help()
|
|
123
|
+
sys.exit(0)
|
|
124
|
+
|
|
125
|
+
elif sys.argv[1] == 'subset':
|
|
126
|
+
from TreeSAK import subset
|
|
127
|
+
subset_parser = subparsers.add_parser('subset', description='Subset tree', usage=subset.subset_usage)
|
|
128
|
+
subset_parser.add_argument('-i', required=True, help='input tree file')
|
|
129
|
+
subset_parser.add_argument('-o', required=True, help='output tree file')
|
|
130
|
+
subset_parser.add_argument('-k', required=False, default=None, help='leaves to keep')
|
|
131
|
+
subset_parser.add_argument('-r', required=False, default=None, help='leaves to remove')
|
|
132
|
+
subset_parser.add_argument('-fmt', required=False, default=1, type=int, help='tree format, default: 1')
|
|
133
|
+
args = vars(parser.parse_args())
|
|
134
|
+
subset.subset(args)
|
|
135
|
+
|
|
136
|
+
elif sys.argv[1] == 'label_tree':
|
|
137
|
+
from TreeSAK import label_tree
|
|
138
|
+
label_tree_parser = subparsers.add_parser('label_tree', description='Add labels to tree leaves', usage=label_tree.label_tree_usage)
|
|
139
|
+
label_tree_parser.add_argument('-tree', required=True, help='tree file in newick format')
|
|
140
|
+
label_tree_parser.add_argument('-label', required=False, default=None, help='label file (label,leaf)')
|
|
141
|
+
label_tree_parser.add_argument('-taxon', required=False, default=None, help='taxonomic classification')
|
|
142
|
+
label_tree_parser.add_argument('-rank', required=False, default=None, help='taxonomic rank to label')
|
|
143
|
+
args = vars(parser.parse_args())
|
|
144
|
+
label_tree.label_tree(args, config_dict)
|
|
145
|
+
|
|
146
|
+
elif sys.argv[1] == 'OneLineAln':
|
|
147
|
+
from TreeSAK import OneLineAln
|
|
148
|
+
OneLineAln_parser = subparsers.add_parser('OneLineAln', description='One-line fasta format alignments', usage=OneLineAln.OneLineAln_usage)
|
|
149
|
+
OneLineAln_parser.add_argument('-in', required=True, help='input MSA in fasta format')
|
|
150
|
+
OneLineAln_parser.add_argument('-out', required=False, default=None, help='output file')
|
|
151
|
+
OneLineAln_parser.add_argument('-upper', required=False, action='store_true', help='turn to uppercase')
|
|
152
|
+
args = vars(parser.parse_args())
|
|
153
|
+
OneLineAln.OneLineAln(args)
|
|
154
|
+
|
|
155
|
+
elif sys.argv[1] == 'SliceMSA':
|
|
156
|
+
from TreeSAK import SliceMSA
|
|
157
|
+
SliceMSA_parser = subparsers.add_parser('SliceMSA', description='Slice MSA by column', usage=SliceMSA.SliceMSA_usage)
|
|
158
|
+
SliceMSA_parser.add_argument('-i', required=True, help='input MSA in fasta format')
|
|
159
|
+
SliceMSA_parser.add_argument('-fi', required=False, default='fasta', help='format (NOT file extension) of input MSA, default: fasta')
|
|
160
|
+
SliceMSA_parser.add_argument('-s', required=True, help='columns to export, e.g. 200-300, -100, 50-')
|
|
161
|
+
SliceMSA_parser.add_argument('-o', required=True, help='output file or folder')
|
|
162
|
+
SliceMSA_parser.add_argument('-fo', required=False, default='fasta', help='format of output MSA, select from fasta and phylip-relaxed, default: fasta')
|
|
163
|
+
SliceMSA_parser.add_argument('-force', required=False, action="store_true", help='force overwrite existing output folder')
|
|
164
|
+
args = vars(parser.parse_args())
|
|
165
|
+
SliceMSA.SliceMSA(args)
|
|
166
|
+
|
|
167
|
+
elif sys.argv[1] == 'compare_trees':
|
|
168
|
+
from TreeSAK import compare_trees
|
|
169
|
+
compare_trees_parser = subparsers.add_parser('compare_trees', usage=compare_trees.compare_trees_usage)
|
|
170
|
+
compare_trees_parser.add_argument('-o', required=True, help='output directory')
|
|
171
|
+
compare_trees_parser.add_argument('-t1', required=True, help='tree (folder) 1')
|
|
172
|
+
compare_trees_parser.add_argument('-t2', required=True, help='tree (folder) 2')
|
|
173
|
+
compare_trees_parser.add_argument('-tx', required=False, default='newick', help='extention of tree files, default: newick')
|
|
174
|
+
compare_trees_parser.add_argument('-dm', required=False, action="store_true", help='export distance-alike matrix, obtained by subtract the similarity value from 1')
|
|
175
|
+
compare_trees_parser.add_argument('-t', required=False, type=int, default=1, help='number of threads')
|
|
176
|
+
compare_trees_parser.add_argument('-tmp', required=False, action="store_true", help='keep tmp files')
|
|
177
|
+
compare_trees_parser.add_argument('-f', required=False, action="store_true", help='force overwrite')
|
|
178
|
+
args = vars(parser.parse_args())
|
|
179
|
+
compare_trees.compare_trees(args)
|
|
180
|
+
|
|
181
|
+
elif sys.argv[1] == 'rename_leaves':
|
|
182
|
+
from TreeSAK import rename_leaves
|
|
183
|
+
rename_leaves_parser = subparsers.add_parser('rename_leaves', usage=rename_leaves.rename_leaves_usage)
|
|
184
|
+
rename_leaves_parser.add_argument('-i', required=True, help='input tree')
|
|
185
|
+
rename_leaves_parser.add_argument('-r', required=True, help='rename file')
|
|
186
|
+
rename_leaves_parser.add_argument('-f', required=False, default=1, help='tree format, default: 1')
|
|
187
|
+
rename_leaves_parser.add_argument('-o', required=True, help='output tree')
|
|
188
|
+
args = vars(parser.parse_args())
|
|
189
|
+
rename_leaves.rename_leaves(args)
|
|
190
|
+
|
|
191
|
+
elif sys.argv[1] == 'FLN':
|
|
192
|
+
from TreeSAK import format_leaf_name
|
|
193
|
+
format_leaf_name_parser = subparsers.add_parser('FLN', usage=format_leaf_name.format_leaf_name_usage)
|
|
194
|
+
format_leaf_name_parser.add_argument('-i', required=True, help='input tree')
|
|
195
|
+
format_leaf_name_parser.add_argument('-fmt', required=False, default=1, help='tree format, default: 1')
|
|
196
|
+
format_leaf_name_parser.add_argument('-o', required=True, help='output tree')
|
|
197
|
+
format_leaf_name_parser.add_argument('-s2u', required=False, action="store_true", help='change space in tree leaves to underscore')
|
|
198
|
+
format_leaf_name_parser.add_argument('-ns', required=False, action="store_true", help='remove space from leaf names')
|
|
199
|
+
format_leaf_name_parser.add_argument('-nsqm', required=False, action="store_true", help='remove single quotation marks from leaf names')
|
|
200
|
+
format_leaf_name_parser.add_argument('-ndqm', required=False, action="store_true", help='remove double quotation marks from leaf names')
|
|
201
|
+
args = vars(parser.parse_args())
|
|
202
|
+
format_leaf_name.format_leaf_name(args)
|
|
203
|
+
|
|
204
|
+
elif sys.argv[1] == 'AssessCVG':
|
|
205
|
+
from TreeSAK import AssessCVG
|
|
206
|
+
AssessCVG_parser = subparsers.add_parser('AssessCVG', usage=AssessCVG.AssessCVG_usage)
|
|
207
|
+
AssessCVG_parser.add_argument('-m1', required=True, help='mcmc.txt from run 1')
|
|
208
|
+
AssessCVG_parser.add_argument('-m2', required=True, help='mcmc.txt from run 2')
|
|
209
|
+
AssessCVG_parser.add_argument('-o', required=True, help='output convergence plot')
|
|
210
|
+
args = vars(parser.parse_args())
|
|
211
|
+
AssessCVG.AssessCVG(args)
|
|
212
|
+
|
|
213
|
+
elif sys.argv[1] == 'deltall':
|
|
214
|
+
from TreeSAK import deltall
|
|
215
|
+
parse_deltall_stdout_parser = subparsers.add_parser('parse_deltall_stdout', usage=deltall.deltall_usage)
|
|
216
|
+
parse_deltall_stdout_parser.add_argument('-i', required=True, help='input file (e.g., nohup.out)')
|
|
217
|
+
parse_deltall_stdout_parser.add_argument('-o', required=True, help='output summary')
|
|
218
|
+
args = vars(parser.parse_args())
|
|
219
|
+
deltall.deltall(args)
|
|
220
|
+
|
|
221
|
+
elif sys.argv[1] == 'get_arCOG_seq':
|
|
222
|
+
from TreeSAK import get_arCOG_seq
|
|
223
|
+
get_arCOG_seq_parser = subparsers.add_parser('get_arCOG_seq', usage=get_arCOG_seq.get_arCOG_seq_usage)
|
|
224
|
+
get_arCOG_seq_parser.add_argument('-i', required=True, help='arCOD id file, one id per line')
|
|
225
|
+
get_arCOG_seq_parser.add_argument('-db_dir', required=True, help='database folder')
|
|
226
|
+
get_arCOG_seq_parser.add_argument('-o', required=True, help='output folder')
|
|
227
|
+
get_arCOG_seq_parser.add_argument('-f', required=False, action="store_true", help='force overwrite existing output folder')
|
|
228
|
+
args = vars(parser.parse_args())
|
|
229
|
+
get_arCOG_seq.get_arCOG_seq(args)
|
|
230
|
+
|
|
231
|
+
elif sys.argv[1] == 'ConvertMSA':
|
|
232
|
+
from TreeSAK import ConvertMSA
|
|
233
|
+
ConvertMSA_parser = subparsers.add_parser('ConvertMSA', usage=ConvertMSA.ConvertMSA_usage)
|
|
234
|
+
ConvertMSA_parser.add_argument('-i', required=True, help='input alignment')
|
|
235
|
+
ConvertMSA_parser.add_argument('-xi', required=False, default='aln', help='input alignment extension')
|
|
236
|
+
ConvertMSA_parser.add_argument('-fi', required=True, help='input alignment format, e.g., fasta, phylip')
|
|
237
|
+
ConvertMSA_parser.add_argument('-o', required=True, help='output alignment')
|
|
238
|
+
ConvertMSA_parser.add_argument('-xo', required=False, default='aln', help='output alignment extension')
|
|
239
|
+
ConvertMSA_parser.add_argument('-fo', required=True, help='output alignment format, e.g., fasta, phylip')
|
|
240
|
+
ConvertMSA_parser.add_argument('-oneline', required=False, action="store_true", help='put sequence in single line, available if -fo is fasta')
|
|
241
|
+
ConvertMSA_parser.add_argument('-nogap', required=False, action="store_true", help='remove gaps from alignment, available if -fo is fasta')
|
|
242
|
+
ConvertMSA_parser.add_argument('-f', required=False, action="store_true", help='force overwrite existing output folder')
|
|
243
|
+
args = vars(parser.parse_args())
|
|
244
|
+
ConvertMSA.ConvertMSA(args)
|
|
245
|
+
|
|
246
|
+
elif sys.argv[1] == 'MarkerRef2Tree':
|
|
247
|
+
from TreeSAK import MarkerRef2Tree
|
|
248
|
+
MarkerRef2Tree_parser = subparsers.add_parser('MarkerRef2Tree', usage=MarkerRef2Tree.MarkerRef2Tree_usage)
|
|
249
|
+
MarkerRef2Tree_parser.add_argument('-i', required=True, help='faa dir')
|
|
250
|
+
MarkerRef2Tree_parser.add_argument('-x', required=False, default='faa', help='faa file extension, default: faa')
|
|
251
|
+
MarkerRef2Tree_parser.add_argument('-m', required=True, help='marker seq dir, file extension need to be faa')
|
|
252
|
+
MarkerRef2Tree_parser.add_argument('-mx', required=False, default='faa', help='marker seq file extension, default: faa')
|
|
253
|
+
MarkerRef2Tree_parser.add_argument('-g', required=False, default=None, help='genome group')
|
|
254
|
+
MarkerRef2Tree_parser.add_argument('-c', required=False, default='85', help='presence absence cutoffs, default: 85')
|
|
255
|
+
MarkerRef2Tree_parser.add_argument('-o', required=True, help='output dir')
|
|
256
|
+
MarkerRef2Tree_parser.add_argument('-e', required=False, default='1e-30', help='e-value cutoff, default: 1e-30')
|
|
257
|
+
MarkerRef2Tree_parser.add_argument('-t', required=True, type=int, help='num of threads')
|
|
258
|
+
MarkerRef2Tree_parser.add_argument('-mmn', required=False, default=1, type=int, help='minimal marker number, default: 1')
|
|
259
|
+
MarkerRef2Tree_parser.add_argument('-psiblast', required=False, action="store_true", help='run psiblast')
|
|
260
|
+
MarkerRef2Tree_parser.add_argument('-bmge', required=False, action="store_true", help='trim MSA with BMGE, default is trimal')
|
|
261
|
+
MarkerRef2Tree_parser.add_argument('-bmge_m', required=False, default='BLOSUM30', help='BMGE trim model, default: BLOSUM30')
|
|
262
|
+
MarkerRef2Tree_parser.add_argument('-bmge_esc', required=False, default='0.55', help='BMGE entropy score cutoff, default: 0.55')
|
|
263
|
+
MarkerRef2Tree_parser.add_argument('-f', required=False, action="store_true", help='force overwrite')
|
|
264
|
+
args = vars(parser.parse_args())
|
|
265
|
+
MarkerRef2Tree.MarkerRef2Tree(args)
|
|
266
|
+
|
|
267
|
+
elif sys.argv[1] == 'AssessMarkerPA':
|
|
268
|
+
from TreeSAK import AssessMarkerPA
|
|
269
|
+
AssessMarkerPA_parser = subparsers.add_parser('AssessMarkerPA', usage=AssessMarkerPA.AssessMarkerPA_usage)
|
|
270
|
+
AssessMarkerPA_parser.add_argument('-ta', required=True, help='trimmed alignments')
|
|
271
|
+
AssessMarkerPA_parser.add_argument('-tax', required=True, help='extension of trimmed alignments')
|
|
272
|
+
AssessMarkerPA_parser.add_argument('-aa', required=True, help='faa file dir')
|
|
273
|
+
AssessMarkerPA_parser.add_argument('-aax', required=True, help='faa file ext')
|
|
274
|
+
AssessMarkerPA_parser.add_argument('-g', required=True, help='genome group')
|
|
275
|
+
AssessMarkerPA_parser.add_argument('-c', required=False, default='25-50-75-85-100', help='cutoffs, default: 25-50-75-85-100')
|
|
276
|
+
AssessMarkerPA_parser.add_argument('-o', required=True, help='output dir')
|
|
277
|
+
AssessMarkerPA_parser.add_argument('-f', required=False, action="store_true", help='force overwrite existing output folder')
|
|
278
|
+
args = vars(parser.parse_args())
|
|
279
|
+
AssessMarkerPA.AssessMarkerPA(args)
|
|
280
|
+
|
|
281
|
+
elif sys.argv[1] == 'AssessMarkerDeltaLL':
|
|
282
|
+
from TreeSAK import AssessMarkerDeltaLL
|
|
283
|
+
AssessMarkerDeltaLL_parser = subparsers.add_parser('AssessMarkerDeltaLL', usage=AssessMarkerDeltaLL.AssessMarkerDeltaLL_usage)
|
|
284
|
+
AssessMarkerDeltaLL_parser.add_argument('-deltall', required=True, help='DeltaLL stdout')
|
|
285
|
+
AssessMarkerDeltaLL_parser.add_argument('-o', required=True, help='output dir')
|
|
286
|
+
AssessMarkerDeltaLL_parser.add_argument('-c', required=False, default='25-50-75-100', help='cutoffs, default: 25-50-75-100')
|
|
287
|
+
AssessMarkerDeltaLL_parser.add_argument('-mmn', required=False, default=20, type=int, help='minimal marker number, default: 20')
|
|
288
|
+
AssessMarkerDeltaLL_parser.add_argument('-aln', required=True, help='faa file dir')
|
|
289
|
+
AssessMarkerDeltaLL_parser.add_argument('-jst', required=False, default='6', help='threads to request in job script, for running iqtree')
|
|
290
|
+
AssessMarkerDeltaLL_parser.add_argument('-qsub', required=False, action="store_true", help='submit job scripts')
|
|
291
|
+
AssessMarkerDeltaLL_parser.add_argument('-f', required=False, action="store_true", help='force overwrite')
|
|
292
|
+
args = vars(parser.parse_args())
|
|
293
|
+
AssessMarkerDeltaLL.AssessMarkerDeltaLL(args)
|
|
294
|
+
|
|
295
|
+
elif sys.argv[1] == 'dating_ss':
|
|
296
|
+
from TreeSAK import dating_ss
|
|
297
|
+
Dating_parser = subparsers.add_parser('Dating_ss', usage=dating_ss.Dating_usage)
|
|
298
|
+
Dating_parser.add_argument('-deltall', required=True, help='DeltaLL stdout')
|
|
299
|
+
Dating_parser.add_argument('-aod', required=True, help='AssessMarkerDeltaLL output dir')
|
|
300
|
+
Dating_parser.add_argument('-og', required=True, help='outgroup leaves, one leaf id per line')
|
|
301
|
+
Dating_parser.add_argument('-eu', required=True, help='EU tree with time constraints')
|
|
302
|
+
Dating_parser.add_argument('-o', required=True, help='dating wd')
|
|
303
|
+
Dating_parser.add_argument('-c', required=False, default='25-50-75-100', help='cutoffs, default: 25-50-75-100')
|
|
304
|
+
Dating_parser.add_argument('-mmn', required=False, default=20, type=int, help='minimal marker number, default: 20')
|
|
305
|
+
Dating_parser.add_argument('-ra', required=False, default=45, type=int, help='root age, default: 45')
|
|
306
|
+
Dating_parser.add_argument('-qsub', required=False, action="store_true", help='submit job scripts for getting in.BV')
|
|
307
|
+
Dating_parser.add_argument('-f', required=False, action="store_true", help='force overwrite')
|
|
308
|
+
Dating_parser.add_argument('-to_test', required=True, help='Settings to test')
|
|
309
|
+
args = vars(parser.parse_args())
|
|
310
|
+
dating_ss.dating_ss(args)
|
|
311
|
+
|
|
312
|
+
elif sys.argv[1] == 'dating':
|
|
313
|
+
from TreeSAK import dating
|
|
314
|
+
dating_parser = subparsers.add_parser('dating', usage=dating.dating_usage)
|
|
315
|
+
dating_parser.add_argument('-i', required=True, help='tree file')
|
|
316
|
+
dating_parser.add_argument('-m', required=True, help='sequence alignments')
|
|
317
|
+
dating_parser.add_argument('-o', required=True, help='output directory')
|
|
318
|
+
dating_parser.add_argument('-p', required=True, help='output prefix')
|
|
319
|
+
dating_parser.add_argument('-s', required=True, help='settings to compare')
|
|
320
|
+
dating_parser.add_argument('-st', required=False, default='2', help='sequence type, 0 for nucleotides, 1 for codons, 2 for AAs, default: 2')
|
|
321
|
+
dating_parser.add_argument('-srun', required=False, action="store_true", help='wrap commands with BioSAK srun')
|
|
322
|
+
dating_parser.add_argument('-f', required=False, action="store_true", help='force overwrite')
|
|
323
|
+
args = vars(parser.parse_args())
|
|
324
|
+
dating.dating(args)
|
|
325
|
+
|
|
326
|
+
elif sys.argv[1] == 'fa2phy':
|
|
327
|
+
from TreeSAK import fa2phy
|
|
328
|
+
fa2phy_parser = subparsers.add_parser('fa2phy', usage=fa2phy.fa2phy_usage)
|
|
329
|
+
fa2phy_parser.add_argument('-i', required=True, help='input MSA in fasta format')
|
|
330
|
+
fa2phy_parser.add_argument('-o', required=True, help='output MSA in phylip format')
|
|
331
|
+
args = vars(parser.parse_args())
|
|
332
|
+
fa2phy.fa2phy(args)
|
|
333
|
+
|
|
334
|
+
elif sys.argv[1] == 'print_leaves':
|
|
335
|
+
from TreeSAK import print_leaves
|
|
336
|
+
print_leaves_parser = subparsers.add_parser('print_leaves', usage=print_leaves.print_leaves_usage)
|
|
337
|
+
print_leaves_parser.add_argument('-i', required=True, help='input tree file')
|
|
338
|
+
args = vars(parser.parse_args())
|
|
339
|
+
print_leaves.print_leaves(args)
|
|
340
|
+
|
|
341
|
+
elif sys.argv[1] == 'CompareMCMC':
|
|
342
|
+
from TreeSAK import CompareMCMC
|
|
343
|
+
CompareMCMC_parser = subparsers.add_parser('CompareMCMC', usage=CompareMCMC.CompareMCMC_usage)
|
|
344
|
+
CompareMCMC_parser.add_argument('-mx', required=True, help='mcmc.txt for x axis')
|
|
345
|
+
CompareMCMC_parser.add_argument('-my', required=True, help='mcmc.txt for y axis')
|
|
346
|
+
CompareMCMC_parser.add_argument('-lx', required=False, default=None, help='label for x axis')
|
|
347
|
+
CompareMCMC_parser.add_argument('-ly', required=False, default=None, help='label for y axis')
|
|
348
|
+
CompareMCMC_parser.add_argument('-max', required=False, default=None, type=int, help='maximum axis value')
|
|
349
|
+
CompareMCMC_parser.add_argument('-fs', required=False, default=16, type=int, help='label font size, default: 16')
|
|
350
|
+
CompareMCMC_parser.add_argument('-o', required=True, help='output plot')
|
|
351
|
+
args = vars(parser.parse_args())
|
|
352
|
+
CompareMCMC.CompareMCMC(args)
|
|
353
|
+
|
|
354
|
+
elif sys.argv[1] == 'PlotMcmcNode':
|
|
355
|
+
from TreeSAK import PlotMcmcNode
|
|
356
|
+
PlotMcmcNode_parser = subparsers.add_parser('PlotMcmcNode', usage=PlotMcmcNode.PlotMcmcNode_usage)
|
|
357
|
+
PlotMcmcNode_parser.add_argument('-i', required=True, help='input txt file')
|
|
358
|
+
PlotMcmcNode_parser.add_argument('-o', required=True, help='output plot')
|
|
359
|
+
args = vars(parser.parse_args())
|
|
360
|
+
PlotMcmcNode.PlotMcmcNode(args)
|
|
361
|
+
|
|
362
|
+
elif sys.argv[1] == 'VisHPD95':
|
|
363
|
+
from TreeSAK import VisHPD95
|
|
364
|
+
VisHPD95_parser = subparsers.add_parser('VisHPD95', usage=VisHPD95.VisHPD95_usage)
|
|
365
|
+
VisHPD95_parser.add_argument('-i', required=True, help='mcmc.txt file or folder')
|
|
366
|
+
VisHPD95_parser.add_argument('-n', required=True, help='Nodes to plot')
|
|
367
|
+
VisHPD95_parser.add_argument('-label', required=False, default=None, help='labels on y axis')
|
|
368
|
+
VisHPD95_parser.add_argument('-x', required=False, default=8,type=int, help='plot width, default: 8')
|
|
369
|
+
VisHPD95_parser.add_argument('-y', required=False, default=5,type=int, help='plot height, default: 5')
|
|
370
|
+
VisHPD95_parser.add_argument('-o', required=True, help='Output plot')
|
|
371
|
+
args = vars(parser.parse_args())
|
|
372
|
+
VisHPD95.VisHPD95(args)
|
|
373
|
+
|
|
374
|
+
elif sys.argv[1] == 'PMSF':
|
|
375
|
+
from TreeSAK import PMSF
|
|
376
|
+
PMSF_parser = subparsers.add_parser('PMSF', usage=PMSF.PMSF_usage)
|
|
377
|
+
PMSF_parser.add_argument('-i', required=True, help='input MSA file')
|
|
378
|
+
PMSF_parser.add_argument('-gm', required=False, default='LG+F+G', help='iqtree model for guide tree, default: LG+F+G')
|
|
379
|
+
PMSF_parser.add_argument('-m', required=False, default='LG+C60+F+G', help='iqtree model, default: LG+C60+F+G')
|
|
380
|
+
PMSF_parser.add_argument('-o', required=True, help='output plot')
|
|
381
|
+
PMSF_parser.add_argument('-p', required=False, default='PMSF', help='tree prefix, default: PMSF')
|
|
382
|
+
PMSF_parser.add_argument('-topo', required=False, default=None, help='topological constraint tree, pass to -g, default is None')
|
|
383
|
+
PMSF_parser.add_argument('-t', required=False, type=int, default=1, help='num of threads')
|
|
384
|
+
PMSF_parser.add_argument('-f', required=False, action="store_true", help='force overwrite')
|
|
385
|
+
args = vars(parser.parse_args())
|
|
386
|
+
PMSF.PMSF(args)
|
|
387
|
+
|
|
388
|
+
elif sys.argv[1] == 'SingleLinePhy':
|
|
389
|
+
from TreeSAK import SingleLinePhy
|
|
390
|
+
SingleLinePhy_parser = subparsers.add_parser('SingleLinePhy', usage=SingleLinePhy.SingleLinePhy_usage)
|
|
391
|
+
SingleLinePhy_parser.add_argument('-i', required=True, help='input file')
|
|
392
|
+
SingleLinePhy_parser.add_argument('-o', required=True, help='output file')
|
|
393
|
+
args = vars(parser.parse_args())
|
|
394
|
+
SingleLinePhy.SingleLinePhy(args)
|
|
395
|
+
|
|
396
|
+
elif sys.argv[1] == 'SplitScore':
|
|
397
|
+
from TreeSAK import SplitScore
|
|
398
|
+
print(SplitScore.SplitScore_usage)
|
|
399
|
+
exit()
|
|
400
|
+
|
|
401
|
+
elif sys.argv[1] == 'SplitScore1OMA':
|
|
402
|
+
from TreeSAK import SplitScore1OMA
|
|
403
|
+
SplitScore1OMA_parser = subparsers.add_parser('SplitScore1OMA', usage=SplitScore1OMA.SplitScore1OMA_usage)
|
|
404
|
+
SplitScore1OMA_parser.add_argument('-i', required=True, help='OrthologousGroups.txt, produced by OMA')
|
|
405
|
+
SplitScore1OMA_parser.add_argument('-s', required=True, help='OrthologousGroupsFasta, produced by OMA')
|
|
406
|
+
SplitScore1OMA_parser.add_argument('-u', required=False, default= None, help='ID of interested genomes, no file extension')
|
|
407
|
+
SplitScore1OMA_parser.add_argument('-o', required=True, help='output directory')
|
|
408
|
+
SplitScore1OMA_parser.add_argument('-m', required=False, default='LG+G+I', help='iqtree_model, default: LG+G+I')
|
|
409
|
+
SplitScore1OMA_parser.add_argument('-c', required=False, type=int, default=80, help='coverage cutoff, default: 80')
|
|
410
|
+
SplitScore1OMA_parser.add_argument('-f', required=False, action="store_true", help='force overwrite')
|
|
411
|
+
SplitScore1OMA_parser.add_argument('-jst', required=False, type=int, default=3, help='num of threads for inferring gene tree, default: 3')
|
|
412
|
+
args = vars(parser.parse_args())
|
|
413
|
+
SplitScore1OMA.SplitScore1OMA(args)
|
|
414
|
+
|
|
415
|
+
elif sys.argv[1] == 'SplitScore1':
|
|
416
|
+
from TreeSAK import SplitScore1
|
|
417
|
+
SplitScore1_parser = subparsers.add_parser('SplitScore1', usage=SplitScore1.SplitScore1_usage)
|
|
418
|
+
SplitScore1_parser.add_argument('-i', required=True, help='orthologous gene sequence')
|
|
419
|
+
SplitScore1_parser.add_argument('-x', required=True, help='fasta file extension')
|
|
420
|
+
SplitScore1_parser.add_argument('-o', required=True, help='output directory')
|
|
421
|
+
SplitScore1_parser.add_argument('-u', required=False, default=None, help='interested genomes, no file extension')
|
|
422
|
+
SplitScore1_parser.add_argument('-m', required=False, default='LG+G+I', help='iqtree_model, default: LG+G+I')
|
|
423
|
+
SplitScore1_parser.add_argument('-c', required=False, type=int, default=85, help='coverage cutoff, default: 85')
|
|
424
|
+
SplitScore1_parser.add_argument('-f', required=False, action="store_true", help='force overwrite')
|
|
425
|
+
SplitScore1_parser.add_argument('-jst', required=False, type=int, default=1, help='num of threads for iqtree2, default: 1')
|
|
426
|
+
args = vars(parser.parse_args())
|
|
427
|
+
SplitScore1.SplitScore1(args)
|
|
428
|
+
|
|
429
|
+
elif sys.argv[1] == 'SplitScore2':
|
|
430
|
+
from TreeSAK import SplitScore2
|
|
431
|
+
SplitScore2_parser = subparsers.add_parser('SplitScore2', usage=SplitScore2.SplitScore2_usage)
|
|
432
|
+
SplitScore2_parser.add_argument('-i', required=True, help='outputs of iqtree from step 1, only needs the contree and ufboot files')
|
|
433
|
+
SplitScore2_parser.add_argument('-g', required=True, help='genome group')
|
|
434
|
+
SplitScore2_parser.add_argument('-k', required=True, help='genome taxon, GTDB format')
|
|
435
|
+
SplitScore2_parser.add_argument('-f', required=False, action="store_true", help='force overwrite')
|
|
436
|
+
SplitScore2_parser.add_argument('-t', required=False, type=int, default=1, help='num of threads, default: 1')
|
|
437
|
+
SplitScore2_parser.add_argument('-c', required=False, default='25,50,75', help='marker ranking cutoffs, default: 25,50,75')
|
|
438
|
+
SplitScore2_parser.add_argument('-o', required=True, help='output directory')
|
|
439
|
+
args = vars(parser.parse_args())
|
|
440
|
+
SplitScore2.SplitScore2(args)
|
|
441
|
+
|
|
442
|
+
elif sys.argv[1] == 'MarkerSeq2Tree':
|
|
443
|
+
from TreeSAK import MarkerSeq2Tree
|
|
444
|
+
MarkerSeq2Tree_parser = subparsers.add_parser('MarkerSeq2Tree', usage=MarkerSeq2Tree.MarkerSeq2Tree_usage)
|
|
445
|
+
MarkerSeq2Tree_parser.add_argument('-i', required=True, help='marker seq dir')
|
|
446
|
+
MarkerSeq2Tree_parser.add_argument('-x', required=True, help='marker seq ext')
|
|
447
|
+
MarkerSeq2Tree_parser.add_argument('-o', required=True, help='output dir')
|
|
448
|
+
MarkerSeq2Tree_parser.add_argument('-t', required=False, type=int, default=1, help='num of threads')
|
|
449
|
+
MarkerSeq2Tree_parser.add_argument('-bmge', required=False, action="store_true", help='perform BMGE trimming on concatenated MSA')
|
|
450
|
+
MarkerSeq2Tree_parser.add_argument('-bmge_m', required=False, default='BLOSUM30', help='BMGE trim model, default: BLOSUM30')
|
|
451
|
+
MarkerSeq2Tree_parser.add_argument('-bmge_esc', required=False, default='0.55', help='BMGE entropy score cutoff, default: 0.55')
|
|
452
|
+
MarkerSeq2Tree_parser.add_argument('-prune', required=False, default=None, help='conservation cutoffs for alignment_pruner.pl')
|
|
453
|
+
MarkerSeq2Tree_parser.add_argument('-f', required=False, action="store_true", help='force overwrite')
|
|
454
|
+
args = vars(parser.parse_args())
|
|
455
|
+
MarkerSeq2Tree.MarkerSeq2Tree(args)
|
|
456
|
+
|
|
457
|
+
elif sys.argv[1] == 'GTDB_tree':
|
|
458
|
+
from TreeSAK import GTDB_tree
|
|
459
|
+
GTDB_tree_parser = subparsers.add_parser('GTDB_tree', usage=GTDB_tree.GTDB_tree_usage)
|
|
460
|
+
GTDB_tree_parser.add_argument('-p', required=True, help='output prefix')
|
|
461
|
+
GTDB_tree_parser.add_argument('-i', required=True, help='genome folder')
|
|
462
|
+
GTDB_tree_parser.add_argument('-x', required=True, help='genome file extension')
|
|
463
|
+
GTDB_tree_parser.add_argument('-t', required=False, type=int, default=1, help='number of threads')
|
|
464
|
+
args = vars(parser.parse_args())
|
|
465
|
+
GTDB_tree.GTDB_tree(args)
|
|
466
|
+
|
|
467
|
+
elif sys.argv[1] == 'ExtractMarkerSeq':
|
|
468
|
+
from TreeSAK import ExtractMarkerSeq
|
|
469
|
+
ExtractMarkerSeq_parser = subparsers.add_parser('ExtractMarkerSeq', usage=ExtractMarkerSeq.ExtractMarkerSeq_usage)
|
|
470
|
+
ExtractMarkerSeq_parser.add_argument('-m', required=True, help='marker seq dir')
|
|
471
|
+
ExtractMarkerSeq_parser.add_argument('-mx', required=True, help='marker seq ext')
|
|
472
|
+
ExtractMarkerSeq_parser.add_argument('-aa', required=True, help='faa file dir')
|
|
473
|
+
ExtractMarkerSeq_parser.add_argument('-aax', required=True, help='faa file ext')
|
|
474
|
+
ExtractMarkerSeq_parser.add_argument('-o', required=True, help='output dir')
|
|
475
|
+
ExtractMarkerSeq_parser.add_argument('-e', required=True, default=1e-30, help='e-value cutoff, default: 1e-30')
|
|
476
|
+
ExtractMarkerSeq_parser.add_argument('-t', required=True, type=int, help='num of threads')
|
|
477
|
+
ExtractMarkerSeq_parser.add_argument('-f', required=False, action="store_true", help='force overwrite')
|
|
478
|
+
args = vars(parser.parse_args())
|
|
479
|
+
ExtractMarkerSeq.ExtractMarkerSeq(args)
|
|
480
|
+
|
|
481
|
+
elif sys.argv[1] == 'OMA':
|
|
482
|
+
from TreeSAK import OMA
|
|
483
|
+
OMA_parser = subparsers.add_parser('OMA', usage=OMA.OMA_usage)
|
|
484
|
+
OMA_parser.add_argument('-i', required=True, help='genome folder')
|
|
485
|
+
OMA_parser.add_argument('-x', required=True, help='genome file extension')
|
|
486
|
+
OMA_parser.add_argument('-st', required=False, default='AA', help='sequence type, AA or DNA, default: AA')
|
|
487
|
+
OMA_parser.add_argument('-og', required=True, help='id of outgroup genomes, without file extension')
|
|
488
|
+
OMA_parser.add_argument('-o', required=True, default=None, help='output dir, i.e., OMA working directory')
|
|
489
|
+
OMA_parser.add_argument('-f', required=False, action="store_true", help='force overwrite')
|
|
490
|
+
OMA_parser.add_argument('-t', required=False, type=int, default=6, help='number of threads for running OMA, default: 6')
|
|
491
|
+
args = vars(parser.parse_args())
|
|
492
|
+
OMA.OMA(args)
|
|
493
|
+
|
|
494
|
+
elif sys.argv[1] == 'OMA2':
|
|
495
|
+
from TreeSAK import OMA2
|
|
496
|
+
OMA2_parser = subparsers.add_parser('OMA2', usage=OMA2.OMA2_usage)
|
|
497
|
+
OMA2_parser.add_argument('-i', required=True, help='OrthologousGroups.txt')
|
|
498
|
+
OMA2_parser.add_argument('-s', required=True, help='sequence dir, OrthologousGroupsFasta')
|
|
499
|
+
OMA2_parser.add_argument('-g', required=False, default=None, help='interested genomes')
|
|
500
|
+
OMA2_parser.add_argument('-o', required=True, default=None, help='output directory')
|
|
501
|
+
OMA2_parser.add_argument('-n', required=False, default=None, help='minimal number of gene in a OG, not compatible with -c')
|
|
502
|
+
OMA2_parser.add_argument('-c', required=False, default=None, help='minimal genome coverage cutoff, not compatible with -n')
|
|
503
|
+
OMA2_parser.add_argument('-f', required=False, action="store_true", help='force overwrite')
|
|
504
|
+
args = vars(parser.parse_args())
|
|
505
|
+
OMA2.OMA2(args)
|
|
506
|
+
|
|
507
|
+
elif sys.argv[1] in ['ALE', 'ale', 'Ale']:
|
|
508
|
+
from TreeSAK import ALE
|
|
509
|
+
print(ALE.ALE_usage)
|
|
510
|
+
exit()
|
|
511
|
+
|
|
512
|
+
elif sys.argv[1] == 'ALE1':
|
|
513
|
+
from TreeSAK import ALE1
|
|
514
|
+
ALE1_parser = subparsers.add_parser('ALE1', usage=ALE1.ALE1_usage)
|
|
515
|
+
ALE1_parser.add_argument('-i', required=False, default=None, help='orthologous groups, either from orthofinder or oma')
|
|
516
|
+
ALE1_parser.add_argument('-s', required=False, default=None, help='sequence file, e.g., combined.faa')
|
|
517
|
+
ALE1_parser.add_argument('-ms', required=False, default=None, help='input is a folder holds the sequence of each marker')
|
|
518
|
+
ALE1_parser.add_argument('-msx', required=False, default='fa', help='file extension of marker sequence file, default: fa')
|
|
519
|
+
ALE1_parser.add_argument('-p', required=True, help='orthologous identification program, orthofinder or oma')
|
|
520
|
+
ALE1_parser.add_argument('-m', required=False, type=int, default=50, help='min_og_genome_num, default: 50')
|
|
521
|
+
ALE1_parser.add_argument('-bmge', required=False, action="store_true", help='trim MSA with BMGE, default no trimming')
|
|
522
|
+
ALE1_parser.add_argument('-bmge_m', required=False, default='BLOSUM30', help='BMGE trim model, default: BLOSUM30')
|
|
523
|
+
ALE1_parser.add_argument('-bmge_esc', required=False, default='0.55', help='BMGE entropy score cutoff, default: 0.55')
|
|
524
|
+
ALE1_parser.add_argument('-o', required=True, help='output dir, i.e., OMA working directory')
|
|
525
|
+
ALE1_parser.add_argument('-jst', required=False, type=int, default=3, help='number of threads specified in job script, default: 3')
|
|
526
|
+
ALE1_parser.add_argument('-f', required=False, action="store_true", help='force overwrite')
|
|
527
|
+
args = vars(parser.parse_args())
|
|
528
|
+
ALE1.ALE1(args)
|
|
529
|
+
|
|
530
|
+
elif sys.argv[1] == 'ALE2':
|
|
531
|
+
from TreeSAK import ALE2
|
|
532
|
+
ALE2_parser = subparsers.add_parser('ALE2', usage=ALE2.ALE2_usage)
|
|
533
|
+
ALE2_parser.add_argument('-1', required=True, help='ALE1 output directory')
|
|
534
|
+
ALE2_parser.add_argument('-s', required=True, help='rooted species tree')
|
|
535
|
+
ALE2_parser.add_argument('-o', required=True, help='output dir, i.e., OMA working directory')
|
|
536
|
+
ALE2_parser.add_argument('-runALE', required=False, action="store_true", help='run ALE')
|
|
537
|
+
ALE2_parser.add_argument('-docker', required=False, default=None, help='Docker image, if ALE was installed with Docker, e.g., gregmich/alesuite_new')
|
|
538
|
+
ALE2_parser.add_argument('-f', required=False, action="store_true", help='force overwrite')
|
|
539
|
+
ALE2_parser.add_argument('-t', required=False, type=int, default=6, help='number of threads, default: 6')
|
|
540
|
+
args = vars(parser.parse_args())
|
|
541
|
+
ALE2.ALE2(args)
|
|
542
|
+
|
|
543
|
+
elif sys.argv[1] == 'ALE3':
|
|
544
|
+
from TreeSAK import ALE3
|
|
545
|
+
ALE3_parser = subparsers.add_parser('ALE3', usage=ALE3.ALE3_usage)
|
|
546
|
+
ALE3_parser.add_argument('-2', required=True, help='Folder with uml_rec files')
|
|
547
|
+
ALE3_parser.add_argument('-c', required=False, type=float, default=75, help='gene family presence cutoff in percentage, default: 75')
|
|
548
|
+
ALE3_parser.add_argument('-a', required=False, default=None, help='OG functional description')
|
|
549
|
+
ALE3_parser.add_argument('-o', required=True, help='output dir')
|
|
550
|
+
ALE3_parser.add_argument('-f', required=False, action="store_true", help='force overwrite')
|
|
551
|
+
args = vars(parser.parse_args())
|
|
552
|
+
ALE3.ALE3(args)
|
|
553
|
+
|
|
554
|
+
elif sys.argv[1] == 'ALE4':
|
|
555
|
+
from TreeSAK import ALE4
|
|
556
|
+
ALE4_parser = subparsers.add_parser('ALE4', usage=ALE4.ALE4_usage)
|
|
557
|
+
ALE4_parser.add_argument('-1', required=True, help='ALE1 output directory')
|
|
558
|
+
ALE4_parser.add_argument('-2', required=True, help='ALE2 output directory')
|
|
559
|
+
ALE4_parser.add_argument('-c', required=True, help='genome_taxon, GTDB format')
|
|
560
|
+
ALE4_parser.add_argument('-color', required=True, help='phylum color code')
|
|
561
|
+
ALE4_parser.add_argument('-o', required=True, help='output dir, i.e., ALE4_op_dir')
|
|
562
|
+
ALE4_parser.add_argument('-f', required=False, action="store_true", help='force overwrite')
|
|
563
|
+
ALE4_parser.add_argument('-api', required=True, help='iTOL API key')
|
|
564
|
+
ALE4_parser.add_argument('-fc', required=False, type=float, default=0.5, help='hgt_freq_cutoff, default: 0.5')
|
|
565
|
+
ALE4_parser.add_argument('-mld', required=False, type=int, default=5, help='donor_node_min_leaf_num, default: 5')
|
|
566
|
+
ALE4_parser.add_argument('-mlr', required=False, type=int, default=5, help='recipient_node_min_leaf_num, default: 5')
|
|
567
|
+
ALE4_parser.add_argument('-itol', required=False, default='batch_access_tmp', help='iTOL project_name, default: batch_access_tmp')
|
|
568
|
+
args = vars(parser.parse_args())
|
|
569
|
+
ALE4.ALE4(args)
|
|
570
|
+
|
|
571
|
+
elif sys.argv[1] == 'ALE6':
|
|
572
|
+
from TreeSAK import ALE6
|
|
573
|
+
ALE6_parser = subparsers.add_parser('ALE6', usage=ALE6.ALE6_usage)
|
|
574
|
+
ALE6_parser.add_argument('-1', required=True, help='ALE1 output directory')
|
|
575
|
+
ALE6_parser.add_argument('-3', required=True, help='ALE3 output directory')
|
|
576
|
+
ALE6_parser.add_argument('-s', required=True, help='rooted species tree')
|
|
577
|
+
ALE6_parser.add_argument('-n', required=False, default=None, help='interested internal node(s)')
|
|
578
|
+
ALE6_parser.add_argument('-cog', required=False, default=None, help='COG annotation results')
|
|
579
|
+
ALE6_parser.add_argument('-kegg', required=False, default=None, help='KEGG annotation results')
|
|
580
|
+
ALE6_parser.add_argument('-o', required=True, help='output directory')
|
|
581
|
+
ALE6_parser.add_argument('-f', required=False, action="store_true", help='force overwrite')
|
|
582
|
+
args = vars(parser.parse_args())
|
|
583
|
+
ALE6.ALE6(args)
|
|
584
|
+
|
|
585
|
+
elif sys.argv[1] == 'ALE7':
|
|
586
|
+
from TreeSAK import ALE7
|
|
587
|
+
ALE7_parser = subparsers.add_parser('ALE7', usage=ALE7.ALE7_usage)
|
|
588
|
+
ALE7_parser.add_argument('-6', required=True, help='ALE6 output directory')
|
|
589
|
+
ALE7_parser.add_argument('-fun', required=True, help='interested functions')
|
|
590
|
+
ALE7_parser.add_argument('-node', required=True, help='interested internal nodes')
|
|
591
|
+
ALE7_parser.add_argument('-o', required=True, help='output directory')
|
|
592
|
+
args = vars(parser.parse_args())
|
|
593
|
+
ALE7.ALE7(args)
|
|
594
|
+
|
|
595
|
+
elif sys.argv[1] == 'RootTree':
|
|
596
|
+
from TreeSAK import RootTree
|
|
597
|
+
RootTree_parser = subparsers.add_parser('RootTree', usage=RootTree.RootTree_usage)
|
|
598
|
+
RootTree_parser.add_argument('-i', required=True, help='input tree')
|
|
599
|
+
RootTree_parser.add_argument('-og', required=True, help='out group leaves')
|
|
600
|
+
RootTree_parser.add_argument('-o', required=True, help='output tree')
|
|
601
|
+
RootTree_parser.add_argument('-add_root', required=False, action='store_true', help='add the root branch')
|
|
602
|
+
RootTree_parser.add_argument('-fmt', required=False, default=1, type=int, help='tree format, default: 1')
|
|
603
|
+
args = vars(parser.parse_args())
|
|
604
|
+
RootTree.RootTree(args)
|
|
605
|
+
|
|
606
|
+
elif sys.argv[1] == 'BMGE':
|
|
607
|
+
from TreeSAK import BMGE
|
|
608
|
+
BMGE_parser = subparsers.add_parser('BMGE', usage=BMGE.BMGE_usage)
|
|
609
|
+
BMGE_parser.add_argument('-p', required=True, help='output prefix')
|
|
610
|
+
BMGE_parser.add_argument('-i', required=True, help='input MSA')
|
|
611
|
+
BMGE_parser.add_argument('-m', required=False, default='BLOSUM30', help='trim model, default: BLOSUM30')
|
|
612
|
+
BMGE_parser.add_argument('-esc', required=False, default='0.55', help='entropy score cutoff, default: 0.55')
|
|
613
|
+
args = vars(parser.parse_args())
|
|
614
|
+
BMGE.BMGE(args)
|
|
615
|
+
|
|
616
|
+
elif sys.argv[1] == 'pRTC':
|
|
617
|
+
from TreeSAK import pRTC
|
|
618
|
+
pRTC_parser = subparsers.add_parser('pRTC', usage=pRTC.pRTC_usage)
|
|
619
|
+
pRTC_parser.add_argument('-i', required=True, help='the file "out" generated by MCMCTree')
|
|
620
|
+
pRTC_parser.add_argument('-m', required=True, help='the file "mcmc.txt" generated by MCMCTree')
|
|
621
|
+
pRTC_parser.add_argument('-r', required=True, help='the folder that contains RTCs')
|
|
622
|
+
pRTC_parser.add_argument('-o', required=True, help='output txt file')
|
|
623
|
+
pRTC_parser.add_argument('-ruby', required=False, default='ruby', help='path to ruby executable file, default: ruby')
|
|
624
|
+
args = vars(parser.parse_args())
|
|
625
|
+
pRTC.pRTC(args)
|
|
626
|
+
|
|
627
|
+
elif sys.argv[1] == 'ConcateMSA':
|
|
628
|
+
from TreeSAK import ConcateMSA
|
|
629
|
+
ConcateMSA_parser = subparsers.add_parser('ConcateMSA', usage=ConcateMSA.ConcateMSA_usage)
|
|
630
|
+
ConcateMSA_parser.add_argument('-i', required=True, help='input MSA folder')
|
|
631
|
+
ConcateMSA_parser.add_argument('-x', required=True, help='input file extension')
|
|
632
|
+
ConcateMSA_parser.add_argument('-p', required=True, help='output prefix')
|
|
633
|
+
ConcateMSA_parser.add_argument('-gene2gnm', required=False, action="store_true", help='gene id to gnm id, split sequence id before the last _')
|
|
634
|
+
args = vars(parser.parse_args())
|
|
635
|
+
ConcateMSA.ConcateMSA(args)
|
|
636
|
+
|
|
637
|
+
elif sys.argv[1] == 'SingleAleHGT':
|
|
638
|
+
from TreeSAK import SingleAleHGT
|
|
639
|
+
SingleAleHGT_parser = subparsers.add_parser('SingleAleHGT', usage=SingleAleHGT.SingleAleHGT_usage)
|
|
640
|
+
SingleAleHGT_parser.add_argument('-faa', required=False, default=None, help='input aa file, e.g., OMA0001.faa')
|
|
641
|
+
SingleAleHGT_parser.add_argument('-msa', required=False, default=None, help='input MSA file, e.g., OMA0001.aln')
|
|
642
|
+
SingleAleHGT_parser.add_argument('-o', required=True, help='output dir, e.g., SingleAleHGT_wd')
|
|
643
|
+
SingleAleHGT_parser.add_argument('-s', required=True, help='rooted species tree')
|
|
644
|
+
SingleAleHGT_parser.add_argument('-c', required=True, help='genome_taxon, GTDB format')
|
|
645
|
+
SingleAleHGT_parser.add_argument('-color', required=True, help='phylum color code')
|
|
646
|
+
SingleAleHGT_parser.add_argument('-fc', required=False, type=float, default=0.5, help='hgt_freq_cutoff, default: 0.5')
|
|
647
|
+
SingleAleHGT_parser.add_argument('-mld', required=False, type=int, default=5, help='donor_node_min_leaf_num, default: 5')
|
|
648
|
+
SingleAleHGT_parser.add_argument('-mlr', required=False, type=int, default=5, help='recipient_node_min_leaf_num, default: 5')
|
|
649
|
+
SingleAleHGT_parser.add_argument('-trim', required=False, action="store_true", help='trim MSA')
|
|
650
|
+
SingleAleHGT_parser.add_argument('-docker', required=False, default=None, help='Docker image, if ALE was installed with Docker, e.g., gregmich/alesuite_new')
|
|
651
|
+
SingleAleHGT_parser.add_argument('-itol', required=False, default='batch_access_tmp', help='iTOL project_name, default: batch_access_tmp')
|
|
652
|
+
SingleAleHGT_parser.add_argument('-api', required=True, help='iTOL API key')
|
|
653
|
+
SingleAleHGT_parser.add_argument('-t', required=False, type=int, default=6, help='number of threads, default: 6')
|
|
654
|
+
SingleAleHGT_parser.add_argument('-f', required=False, action="store_true", help='force overwrite')
|
|
655
|
+
args = vars(parser.parse_args())
|
|
656
|
+
SingleAleHGT.SingleAleHGT(args)
|
|
657
|
+
|
|
658
|
+
elif sys.argv[1] == 'LcaToLeaves':
|
|
659
|
+
from TreeSAK import LcaToLeaves
|
|
660
|
+
LcaToLeaves_parser = subparsers.add_parser('LcaToLeaves', usage=LcaToLeaves.LcaToLeaves_usage)
|
|
661
|
+
LcaToLeaves_parser.add_argument('-s', required=True, help='the .stree file from ALE')
|
|
662
|
+
LcaToLeaves_parser.add_argument('-n', required=True, help='internal node(s)')
|
|
663
|
+
args = vars(parser.parse_args())
|
|
664
|
+
LcaToLeaves.LcaToLeaves(args)
|
|
665
|
+
|
|
666
|
+
elif sys.argv[1] == 'PhyloBiAssoc':
|
|
667
|
+
from TreeSAK import PhyloBiAssoc
|
|
668
|
+
PhyloBiAssoc_parser = subparsers.add_parser('PhyloBiAssoc', usage=PhyloBiAssoc.PhyloBiAssoc_usage)
|
|
669
|
+
PhyloBiAssoc_parser.add_argument('-i', required=True, help='tree file')
|
|
670
|
+
PhyloBiAssoc_parser.add_argument('-d', required=True, help='data file')
|
|
671
|
+
PhyloBiAssoc_parser.add_argument('-o', required=True, help='output directory')
|
|
672
|
+
PhyloBiAssoc_parser.add_argument('-t', required=False, type=int, default=1, help='number of threads, default: 1')
|
|
673
|
+
PhyloBiAssoc_parser.add_argument('-f', required=False, action="store_true", help='force overwrite')
|
|
674
|
+
args = vars(parser.parse_args())
|
|
675
|
+
PhyloBiAssoc.PhyloBiAssoc(args)
|
|
676
|
+
|
|
677
|
+
elif sys.argv[1] == 'replace_clade':
|
|
678
|
+
from TreeSAK import replace_clade
|
|
679
|
+
replace_clade_parser = subparsers.add_parser('replace_clade', usage=replace_clade.replace_clade_usage)
|
|
680
|
+
replace_clade_parser.add_argument('-m', required=True, help='main tree file')
|
|
681
|
+
replace_clade_parser.add_argument('-s', required=True, help='subtree file')
|
|
682
|
+
replace_clade_parser.add_argument('-l', required=True, help='leaves on main tree to be replaced')
|
|
683
|
+
replace_clade_parser.add_argument('-o', required=True, help='output tree')
|
|
684
|
+
replace_clade_parser.add_argument('-of', required=False, default=9, type=int, help='output tree format, default is 9')
|
|
685
|
+
args = vars(parser.parse_args())
|
|
686
|
+
replace_clade.replace_clade(args)
|
|
687
|
+
|
|
688
|
+
elif sys.argv[1] == 'RootTreeGTDB214':
|
|
689
|
+
from TreeSAK import RootTreeGTDB214
|
|
690
|
+
RootTreeGTDB214_parser = subparsers.add_parser('RootTreeGTDB214', usage=RootTreeGTDB214.RootTreeGTDB214_usage)
|
|
691
|
+
RootTreeGTDB214_parser.add_argument('-tree', required=True, help='input unrooted tree')
|
|
692
|
+
RootTreeGTDB214_parser.add_argument('-tax', required=False, default='fna', help='leaf taxon')
|
|
693
|
+
RootTreeGTDB214_parser.add_argument('-db', required=True, help='GTDB database files')
|
|
694
|
+
RootTreeGTDB214_parser.add_argument('-d', required=False, default=None, help='domain, either ar or bac')
|
|
695
|
+
RootTreeGTDB214_parser.add_argument('-o', required=True, help='output folder')
|
|
696
|
+
args = vars(parser.parse_args())
|
|
697
|
+
RootTreeGTDB214.RootTreeGTDB214(args)
|
|
698
|
+
|
|
699
|
+
elif sys.argv[1] == 'RootTreeGTDB220':
|
|
700
|
+
from TreeSAK import RootTreeGTDB220
|
|
701
|
+
RootTreeGTDB220_parser = subparsers.add_parser('RootTreeGTDB220', usage=RootTreeGTDB220.RootTreeGTDB220_usage)
|
|
702
|
+
RootTreeGTDB220_parser.add_argument('-tree', required=True, help='input unrooted tree')
|
|
703
|
+
RootTreeGTDB220_parser.add_argument('-tax', required=False, default='fna', help='leaf taxon')
|
|
704
|
+
RootTreeGTDB220_parser.add_argument('-db', required=True, help='GTDB database files')
|
|
705
|
+
RootTreeGTDB220_parser.add_argument('-d', required=False, default=None, help='domain, either ar or bac')
|
|
706
|
+
RootTreeGTDB220_parser.add_argument('-add_root', required=False, action='store_true', help='add the root branch')
|
|
707
|
+
RootTreeGTDB220_parser.add_argument('-o', required=True, help='output folder')
|
|
708
|
+
args = vars(parser.parse_args())
|
|
709
|
+
RootTreeGTDB220.RootTreeGTDB220(args)
|
|
710
|
+
|
|
711
|
+
elif sys.argv[1] == 'RootTreeGTDB226':
|
|
712
|
+
from TreeSAK import RootTreeGTDB226
|
|
713
|
+
RootTreeGTDB226_parser = subparsers.add_parser('RootTreeGTDB226', usage=RootTreeGTDB226.RootTreeGTDB226_usage)
|
|
714
|
+
RootTreeGTDB226_parser.add_argument('-tree', required=True, help='input unrooted tree')
|
|
715
|
+
RootTreeGTDB226_parser.add_argument('-tax', required=False, default='fna', help='leaf taxon')
|
|
716
|
+
RootTreeGTDB226_parser.add_argument('-db', required=True, help='GTDB database files')
|
|
717
|
+
RootTreeGTDB226_parser.add_argument('-d', required=False, default=None, help='domain, either ar or bac')
|
|
718
|
+
RootTreeGTDB226_parser.add_argument('-add_root', required=False, action='store_true', help='add the root branch')
|
|
719
|
+
RootTreeGTDB226_parser.add_argument('-o', required=True, help='output folder')
|
|
720
|
+
args = vars(parser.parse_args())
|
|
721
|
+
RootTreeGTDB226.RootTreeGTDB226(args)
|
|
722
|
+
|
|
723
|
+
elif sys.argv[1] in ['PB', 'Pb', 'pb']:
|
|
724
|
+
from TreeSAK import PB
|
|
725
|
+
PB_parser = subparsers.add_parser('PB', usage=PB.PB_usage)
|
|
726
|
+
PB_parser.add_argument('-i', required=True, help='input MSA file')
|
|
727
|
+
PB_parser.add_argument('-o', required=True, help='output directory')
|
|
728
|
+
PB_parser.add_argument('-p', required=True, help='output prefix')
|
|
729
|
+
PB_parser.add_argument('-fa2plp', required=False, action="store_true", help='convert MSA format from fasta to phylip')
|
|
730
|
+
PB_parser.add_argument('-n', required=False, type=int, default=4, help='number of chains to run in parallel, default: 4')
|
|
731
|
+
PB_parser.add_argument('-t', required=False, type=int, default=12, help='num of cores, default: 12')
|
|
732
|
+
PB_parser.add_argument('-f', required=False, action="store_true", help='force overwrite')
|
|
733
|
+
args = vars(parser.parse_args())
|
|
734
|
+
PB.PB(args)
|
|
735
|
+
|
|
736
|
+
elif sys.argv[1] == 'AssessPB':
|
|
737
|
+
from TreeSAK import AssessPB
|
|
738
|
+
AssessPB_parser = subparsers.add_parser('AssessPB', usage=AssessPB.AssessPB_usage)
|
|
739
|
+
AssessPB_parser.add_argument('-c1', required=False, default=None, help='chain 1')
|
|
740
|
+
AssessPB_parser.add_argument('-c2', required=False, default=None, help='chain 2')
|
|
741
|
+
AssessPB_parser.add_argument('-c3', required=False, default=None, help='chain 3')
|
|
742
|
+
AssessPB_parser.add_argument('-c4', required=False, default=None, help='chain 4')
|
|
743
|
+
AssessPB_parser.add_argument('-cdir', required=False, default=None, help='chain folder')
|
|
744
|
+
AssessPB_parser.add_argument('-bi', required=False, default=1000, help='burn-in, default: 1000')
|
|
745
|
+
AssessPB_parser.add_argument('-si', required=False, default=10, help='sample interval, default: 10')
|
|
746
|
+
AssessPB_parser.add_argument('-o', required=True, default=None, help='output directory')
|
|
747
|
+
AssessPB_parser.add_argument('-f', required=False, action="store_true", help='force overwrite')
|
|
748
|
+
args = vars(parser.parse_args())
|
|
749
|
+
AssessPB.AssessPB(args)
|
|
750
|
+
|
|
751
|
+
elif sys.argv[1] == 'gap_stats':
|
|
752
|
+
from TreeSAK import gap_stats
|
|
753
|
+
gap_stats_parser = subparsers.add_parser('gap_stats', usage=gap_stats.gap_stats_usage)
|
|
754
|
+
gap_stats_parser.add_argument('-i', required=True, help='MSA in fasta format')
|
|
755
|
+
args = vars(parser.parse_args())
|
|
756
|
+
gap_stats.gap_stats(args)
|
|
757
|
+
|
|
758
|
+
elif sys.argv[1] == 'recode':
|
|
759
|
+
from TreeSAK import recode
|
|
760
|
+
recode_parser = subparsers.add_parser('recode', usage=recode.recode_usage)
|
|
761
|
+
recode_parser.add_argument('-i', required=True, help='input file')
|
|
762
|
+
recode_parser.add_argument('-m', required=True, help='recoding scheme, choose from d4, d6 or s4')
|
|
763
|
+
recode_parser.add_argument('-o', required=True, help='output file')
|
|
764
|
+
args = vars(parser.parse_args())
|
|
765
|
+
recode.recode(args)
|
|
766
|
+
|
|
767
|
+
elif sys.argv[1] == 'pruneMSA':
|
|
768
|
+
from TreeSAK import pruneMSA
|
|
769
|
+
pruneMSA_parser = subparsers.add_parser('pruneMSA', usage=pruneMSA.pruneMSA_usage)
|
|
770
|
+
pruneMSA_parser.add_argument('-i', required=True, help='input MSA file')
|
|
771
|
+
pruneMSA_parser.add_argument('-c', required=True, help='conservation cutoffs, comma separated')
|
|
772
|
+
args = vars(parser.parse_args())
|
|
773
|
+
pruneMSA.pruneMSA(args)
|
|
774
|
+
|
|
775
|
+
elif sys.argv[1] == 'iTOL':
|
|
776
|
+
from TreeSAK import iTOL
|
|
777
|
+
iTOL_parser = subparsers.add_parser('iTOL', description='Decorate tree with iTOL', usage=iTOL.iTOL_usage)
|
|
778
|
+
iTOL_parser.add_argument('-Labels', required=False, action='store_true', help='Labels')
|
|
779
|
+
iTOL_parser.add_argument('-ColoredLabel', required=False, action='store_true', help='ColoredLabel')
|
|
780
|
+
iTOL_parser.add_argument('-MultiStyleLabel', required=False, action='store_true', help='MultiStyleLabel')
|
|
781
|
+
iTOL_parser.add_argument('-ColorStrip', required=False, action='store_true', help='ColorStrip')
|
|
782
|
+
iTOL_parser.add_argument('-ColorRange', required=False, action='store_true', help='ColorRange')
|
|
783
|
+
iTOL_parser.add_argument('-ColorClade', required=False, action='store_true', help='ColorClade')
|
|
784
|
+
iTOL_parser.add_argument('-ColorLabel', required=False, action='store_true', help='ColorLabel')
|
|
785
|
+
iTOL_parser.add_argument('-SimpleBar', required=False, action='store_true', help='SimpleBar')
|
|
786
|
+
iTOL_parser.add_argument('-Heatmap', required=False, action='store_true', help='Heatmap')
|
|
787
|
+
iTOL_parser.add_argument('-ExternalShape', required=False, action='store_true', help='ExternalShape')
|
|
788
|
+
iTOL_parser.add_argument('-Binary', required=False, action='store_true', help='Binary')
|
|
789
|
+
iTOL_parser.add_argument('-BinaryID', required=False, action='store_true', help='Binary specified IDs as 1')
|
|
790
|
+
iTOL_parser.add_argument('-BinaryShape', required=False, default='2', help='Binary Shape, choose from 1(rectangle), 2(circle), 3(star), 4, 5 and 6, default is 2')
|
|
791
|
+
iTOL_parser.add_argument('-BinaryColor', required=False, default='red', help='Binary Color, default is red')
|
|
792
|
+
iTOL_parser.add_argument('-Connection', required=False, action='store_true', help='Connection')
|
|
793
|
+
iTOL_parser.add_argument('-PieChart', required=False, action='store_true', help='PieChart')
|
|
794
|
+
iTOL_parser.add_argument('-Collapse', required=False, action='store_true', help='Collapse')
|
|
795
|
+
iTOL_parser.add_argument('-id', required=False, default=None, help='File contains leaf id')
|
|
796
|
+
iTOL_parser.add_argument('-ll', required=False, default=None, help='Leaf Label')
|
|
797
|
+
iTOL_parser.add_argument('-gc', required=False, default=None, help='Specify Group/column Color (optional)')
|
|
798
|
+
iTOL_parser.add_argument('-cc', required=False, default=None, help='Specify Column Color (for ExternalShape format) (optional)')
|
|
799
|
+
iTOL_parser.add_argument('-lg', required=False, default=None, help='Leaf to Group')
|
|
800
|
+
iTOL_parser.add_argument('-lv', required=False, default=None, help='Leaf to Value')
|
|
801
|
+
iTOL_parser.add_argument('-lm', required=False, default=None, help='Leaf to data Matrix')
|
|
802
|
+
iTOL_parser.add_argument('-dr', required=False, default=None, help='Donor to Recipient')
|
|
803
|
+
iTOL_parser.add_argument('-scale', required=False, default=None, help='Scale Values, in format 0-3-6-9')
|
|
804
|
+
iTOL_parser.add_argument('-lt', required=False, default=None, help='Legend Title')
|
|
805
|
+
iTOL_parser.add_argument('-legend', required=False, action='store_true', help='show legend for ColorStrip')
|
|
806
|
+
iTOL_parser.add_argument('-show_strip_labels', required=False, action='store_true', help='SHOW_STRIP_LABELS')
|
|
807
|
+
iTOL_parser.add_argument('-o', required=True, help='Output filename')
|
|
808
|
+
args = vars(parser.parse_args())
|
|
809
|
+
iTOL.iTOL(args)
|
|
810
|
+
|
|
811
|
+
elif sys.argv[1] == 'supertree':
|
|
812
|
+
from TreeSAK import supertree
|
|
813
|
+
supertree_parser = subparsers.add_parser('supertree', usage=supertree.supertree_usage)
|
|
814
|
+
supertree_parser.add_argument('-i', required=True, help='orthologous gene sequence')
|
|
815
|
+
supertree_parser.add_argument('-x', required=True, help='faa file extension')
|
|
816
|
+
supertree_parser.add_argument('-o', required=True, help='output directory')
|
|
817
|
+
supertree_parser.add_argument('-bmge', required=False, action="store_true", help='trim with BMGE, default is trimal')
|
|
818
|
+
supertree_parser.add_argument('-bmge_m', required=False, default='BLOSUM30', help='trim model, default: BLOSUM30')
|
|
819
|
+
supertree_parser.add_argument('-bmge_esc', required=False, default='0.55', help='entropy score cutoff, default: 0.55')
|
|
820
|
+
supertree_parser.add_argument('-iqtree_m', required=False, default='LG+G+I', help='iqtree_model, default: LG+G+I')
|
|
821
|
+
supertree_parser.add_argument('-pb', required=False, action="store_true", help='infer tree with PhyloBayes-MPI, default is iqtree')
|
|
822
|
+
supertree_parser.add_argument('-f', required=False, action="store_true", help='force overwrite')
|
|
823
|
+
supertree_parser.add_argument('-t', required=False, type=int, default=1, help='num of threads, default: 1')
|
|
824
|
+
args = vars(parser.parse_args())
|
|
825
|
+
supertree.supertree(args)
|
|
826
|
+
|
|
827
|
+
elif sys.argv[1] == 'TaxonTree':
|
|
828
|
+
from TreeSAK import TaxonTree
|
|
829
|
+
TaxonTree_parser = subparsers.add_parser('TaxonTree', usage=TaxonTree.TaxonTree_usage)
|
|
830
|
+
TaxonTree_parser.add_argument('-i', required=True, help='input tree file')
|
|
831
|
+
TaxonTree_parser.add_argument('-tax', required=True, help='interested taxon')
|
|
832
|
+
TaxonTree_parser.add_argument('-o', required=True, help='output tree file')
|
|
833
|
+
args = vars(parser.parse_args())
|
|
834
|
+
TaxonTree.TaxonTree(args)
|
|
835
|
+
|
|
836
|
+
elif sys.argv[1] == 'mcmcTC':
|
|
837
|
+
from TreeSAK import mcmcTC
|
|
838
|
+
mcmcTC_parser = subparsers.add_parser('mcmcTC', usage=mcmcTC.mcmcTC_usage)
|
|
839
|
+
mcmcTC_parser.add_argument('-i', required=True, help='input tree')
|
|
840
|
+
mcmcTC_parser.add_argument('-o', required=True, help='output tree')
|
|
841
|
+
mcmcTC_parser.add_argument('-tc', required=True, help='time constraint file')
|
|
842
|
+
args = vars(parser.parse_args())
|
|
843
|
+
mcmcTC.mcmcTC(args)
|
|
844
|
+
|
|
845
|
+
elif sys.argv[1] == 'mcmc2tree':
|
|
846
|
+
from TreeSAK import mcmc2tree
|
|
847
|
+
mcmc2tree_parser = subparsers.add_parser('mcmc2tree', usage=mcmc2tree.mcmc2tree_usage)
|
|
848
|
+
mcmc2tree_parser.add_argument('-i', required=True, help='the .out file from mcmctree')
|
|
849
|
+
mcmc2tree_parser.add_argument('-o', required=True, help='output tree file')
|
|
850
|
+
args = vars(parser.parse_args())
|
|
851
|
+
mcmc2tree.mcmc2tree(args)
|
|
852
|
+
|
|
853
|
+
elif sys.argv[1] == 'cogTree':
|
|
854
|
+
from TreeSAK import cogTree
|
|
855
|
+
cogTree_parser = subparsers.add_parser('cogTree', usage=cogTree.cogTree_usage)
|
|
856
|
+
cogTree_parser.add_argument('-i', required=True, help='orthologous gene sequence')
|
|
857
|
+
cogTree_parser.add_argument('-fun', required=True, help='interested functions')
|
|
858
|
+
cogTree_parser.add_argument('-cog', required=False, default=None, help='COG annotation results')
|
|
859
|
+
cogTree_parser.add_argument('-o', required=True, help='output directory')
|
|
860
|
+
cogTree_parser.add_argument('-bmge', required=False, action="store_true", help='trim with BMGE, default is trimal')
|
|
861
|
+
cogTree_parser.add_argument('-bmge_m', required=False, default='BLOSUM30', help='trim model, default: BLOSUM30')
|
|
862
|
+
cogTree_parser.add_argument('-bmge_esc', required=False, default='0.55', help='entropy score cutoff, default: 0.55')
|
|
863
|
+
cogTree_parser.add_argument('-iqtree_m', required=False, default='LG+G+I', help='iqtree_model, default: LG+G+I')
|
|
864
|
+
cogTree_parser.add_argument('-f', required=False, action="store_true", help='force overwrite')
|
|
865
|
+
cogTree_parser.add_argument('-t', required=False, type=int, default=1, help='num of threads, default: 1')
|
|
866
|
+
args = vars(parser.parse_args())
|
|
867
|
+
cogTree.cogTree(args)
|
|
868
|
+
|
|
869
|
+
elif sys.argv[1] == 'koTree':
|
|
870
|
+
from TreeSAK import koTree
|
|
871
|
+
koTree_parser = subparsers.add_parser('koTree', usage=koTree.koTree_usage)
|
|
872
|
+
koTree_parser.add_argument('-i', required=True, help='orthologous gene sequence')
|
|
873
|
+
koTree_parser.add_argument('-fun', required=True, help='interested functions')
|
|
874
|
+
koTree_parser.add_argument('-kegg', required=False, default=None, help='KEGG annotation results')
|
|
875
|
+
koTree_parser.add_argument('-o', required=True, help='output directory')
|
|
876
|
+
koTree_parser.add_argument('-bmge', required=False, action="store_true", help='trim with BMGE, default is trimal')
|
|
877
|
+
koTree_parser.add_argument('-bmge_m', required=False, default='BLOSUM30', help='trim model, default: BLOSUM30')
|
|
878
|
+
koTree_parser.add_argument('-bmge_esc', required=False, default='0.55', help='entropy score cutoff, default: 0.55')
|
|
879
|
+
koTree_parser.add_argument('-iqtree_m', required=False, default='LG+G+I', help='iqtree_model, default: LG+G+I')
|
|
880
|
+
koTree_parser.add_argument('-f', required=False, action="store_true", help='force overwrite')
|
|
881
|
+
koTree_parser.add_argument('-t', required=False, type=int, default=1, help='num of threads, default: 1')
|
|
882
|
+
args = vars(parser.parse_args())
|
|
883
|
+
koTree.koTree(args)
|
|
884
|
+
|
|
885
|
+
elif sys.argv[1] == 'iTOL_gene_tree':
|
|
886
|
+
from TreeSAK import iTOL_gene_tree
|
|
887
|
+
iTOL_gene_tree_parser = subparsers.add_parser('iTOL_gene_tree', usage=iTOL_gene_tree.iTOL_gene_tree_usage)
|
|
888
|
+
iTOL_gene_tree_parser.add_argument('-i', required=True, help='input metadata')
|
|
889
|
+
iTOL_gene_tree_parser.add_argument('-tree', required=False, default=None, help='gene id, in tree file')
|
|
890
|
+
iTOL_gene_tree_parser.add_argument('-txt', required=False, default=None, help='gene id, in txt file')
|
|
891
|
+
iTOL_gene_tree_parser.add_argument('-o', required=True, help='output metadata')
|
|
892
|
+
iTOL_gene_tree_parser.add_argument('-na', required=False, action='store_true', help='include leaves with na values')
|
|
893
|
+
args = vars(parser.parse_args())
|
|
894
|
+
iTOL_gene_tree.iTOL_gene_tree(args)
|
|
895
|
+
|
|
896
|
+
elif sys.argv[1] == 'GeneTree':
|
|
897
|
+
from TreeSAK import GeneTree
|
|
898
|
+
GeneTree_parser = subparsers.add_parser('GeneTree', usage=GeneTree.GeneTree_usage)
|
|
899
|
+
GeneTree_parser.add_argument('-i', required=False, default=None, help='sequence file')
|
|
900
|
+
GeneTree_parser.add_argument('-o', required=True, help='output dir')
|
|
901
|
+
GeneTree_parser.add_argument('-t', required=False, type=int, default=1, help='number of threads, default is 1')
|
|
902
|
+
GeneTree_parser.add_argument('-trimal', required=False, action="store_true", help='trim with trimal, default is BMGE')
|
|
903
|
+
GeneTree_parser.add_argument('-f', required=False, action="store_true", help='force overwrite')
|
|
904
|
+
GeneTree_parser.add_argument('-max_gap', required=False, default='40', help='maximum percentage of gap, default is 40')
|
|
905
|
+
args = vars(parser.parse_args())
|
|
906
|
+
GeneTree.GeneTree(args)
|
|
907
|
+
|
|
908
|
+
elif sys.argv[1] == 'parse_reltime':
|
|
909
|
+
from TreeSAK import parse_reltime
|
|
910
|
+
parse_reltime_parser = subparsers.add_parser('parse_reltime', usage=parse_reltime.parse_reltime_usage)
|
|
911
|
+
parse_reltime_parser.add_argument('-i', required=True, help='reltime output file')
|
|
912
|
+
parse_reltime_parser.add_argument('-n', required=True, help='interested node txt')
|
|
913
|
+
parse_reltime_parser.add_argument('-o', required=True, help='output txt file')
|
|
914
|
+
args = vars(parser.parse_args())
|
|
915
|
+
parse_reltime.parse_reltime(args)
|
|
916
|
+
|
|
917
|
+
elif sys.argv[1] == 'mcmctree_vs_reltime':
|
|
918
|
+
from TreeSAK import mcmctree_vs_reltime
|
|
919
|
+
mcmctree_vs_reltime_parser = subparsers.add_parser('mcmctree_vs_reltime', usage=mcmctree_vs_reltime.mcmctree_vs_reltime_usage)
|
|
920
|
+
mcmctree_vs_reltime_parser.add_argument('-m', required=True, help='.out file from MCMCTree')
|
|
921
|
+
mcmctree_vs_reltime_parser.add_argument('-r', required=True, help='output from elTime')
|
|
922
|
+
mcmctree_vs_reltime_parser.add_argument('-n', required=True, help='interested nodes txt file')
|
|
923
|
+
mcmctree_vs_reltime_parser.add_argument('-o', required=True, help='output pdf')
|
|
924
|
+
args = vars(parser.parse_args())
|
|
925
|
+
mcmctree_vs_reltime.mcmctree_vs_reltime(args)
|
|
926
|
+
|
|
927
|
+
elif sys.argv[1] == 'iTOL_msa_stats':
|
|
928
|
+
from TreeSAK import iTOL_msa_stats
|
|
929
|
+
iTOL_msa_stats_parser = subparsers.add_parser('iTOL_msa_stats', usage=iTOL_msa_stats.iTOL_msa_stats_usage)
|
|
930
|
+
iTOL_msa_stats_parser.add_argument('-i', required=True, help='MSA file')
|
|
931
|
+
args = vars(parser.parse_args())
|
|
932
|
+
iTOL_msa_stats.iTOL_msa_stats(args)
|
|
933
|
+
|
|
934
|
+
else:
|
|
935
|
+
print('Unrecognized module: %s, program exited!' % sys.argv[1])
|
|
936
|
+
exit()
|
|
937
|
+
|
|
938
|
+
|
|
939
|
+
upload_to_pypi_cmd = '''
|
|
940
|
+
|
|
941
|
+
cd /Users/songweizhi/PycharmProjects/TreeSAK
|
|
942
|
+
rm -r build dist TreeSAK.egg-info
|
|
943
|
+
python3 setup.py sdist bdist_wheel
|
|
944
|
+
twine upload dist/*
|
|
945
|
+
|
|
946
|
+
__token__
|
|
947
|
+
|
|
948
|
+
pip3 install --upgrade TreeSAK
|
|
949
|
+
|
|
950
|
+
'''
|