kssdtree 2.0.6__tar.gz → 2.0.8__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. {kssdtree-2.0.6/kssdtree.egg-info → kssdtree-2.0.8}/PKG-INFO +5 -1
  2. kssdtree-2.0.8/README.md +66 -0
  3. {kssdtree-2.0.6 → kssdtree-2.0.8}/command_dist.c +13 -13
  4. {kssdtree-2.0.6 → kssdtree-2.0.8}/iseq2comem.c +49 -3
  5. {kssdtree-2.0.6 → kssdtree-2.0.8/kssdtree.egg-info}/PKG-INFO +5 -1
  6. {kssdtree-2.0.6 → kssdtree-2.0.8}/setup.py +1 -1
  7. {kssdtree-2.0.6 → kssdtree-2.0.8}/toolutils.py +1 -1
  8. kssdtree-2.0.6/README.md +0 -8
  9. {kssdtree-2.0.6 → kssdtree-2.0.8}/MANIFEST.in +0 -0
  10. {kssdtree-2.0.6 → kssdtree-2.0.8}/align.c +0 -0
  11. {kssdtree-2.0.6 → kssdtree-2.0.8}/buildtree.c +0 -0
  12. {kssdtree-2.0.6 → kssdtree-2.0.8}/bytescale.c +0 -0
  13. {kssdtree-2.0.6 → kssdtree-2.0.8}/cluster.c +0 -0
  14. {kssdtree-2.0.6 → kssdtree-2.0.8}/co2mco.c +0 -0
  15. {kssdtree-2.0.6 → kssdtree-2.0.8}/command_composite.c +0 -0
  16. {kssdtree-2.0.6 → kssdtree-2.0.8}/command_dist_wrapper.c +0 -0
  17. {kssdtree-2.0.6 → kssdtree-2.0.8}/command_set.c +0 -0
  18. {kssdtree-2.0.6 → kssdtree-2.0.8}/command_shuffle.c +0 -0
  19. {kssdtree-2.0.6 → kssdtree-2.0.8}/distancemat.c +0 -0
  20. {kssdtree-2.0.6 → kssdtree-2.0.8}/dnj.c +0 -0
  21. {kssdtree-2.0.6 → kssdtree-2.0.8}/dnjheaders/bytescale.h +0 -0
  22. {kssdtree-2.0.6 → kssdtree-2.0.8}/dnjheaders/dnj.h +0 -0
  23. {kssdtree-2.0.6 → kssdtree-2.0.8}/dnjheaders/filebuff.h +0 -0
  24. {kssdtree-2.0.6 → kssdtree-2.0.8}/dnjheaders/hclust.h +0 -0
  25. {kssdtree-2.0.6 → kssdtree-2.0.8}/dnjheaders/matrix.h +0 -0
  26. {kssdtree-2.0.6 → kssdtree-2.0.8}/dnjheaders/mman.h +0 -0
  27. {kssdtree-2.0.6 → kssdtree-2.0.8}/dnjheaders/nj.h +0 -0
  28. {kssdtree-2.0.6 → kssdtree-2.0.8}/dnjheaders/nwck.h +0 -0
  29. {kssdtree-2.0.6 → kssdtree-2.0.8}/dnjheaders/pherror.h +0 -0
  30. {kssdtree-2.0.6 → kssdtree-2.0.8}/dnjheaders/phy.h +0 -0
  31. {kssdtree-2.0.6 → kssdtree-2.0.8}/dnjheaders/qseqs.h +0 -0
  32. {kssdtree-2.0.6 → kssdtree-2.0.8}/dnjheaders/str.h +0 -0
  33. {kssdtree-2.0.6 → kssdtree-2.0.8}/dnjheaders/threader.h +0 -0
  34. {kssdtree-2.0.6 → kssdtree-2.0.8}/dnjheaders/tmp.h +0 -0
  35. {kssdtree-2.0.6 → kssdtree-2.0.8}/dnjheaders/vector.h +0 -0
  36. {kssdtree-2.0.6 → kssdtree-2.0.8}/filebuff.c +0 -0
  37. {kssdtree-2.0.6 → kssdtree-2.0.8}/global_basic.c +0 -0
  38. {kssdtree-2.0.6 → kssdtree-2.0.8}/hclust.c +0 -0
  39. {kssdtree-2.0.6 → kssdtree-2.0.8}/kssdheaders/co2mco.h +0 -0
  40. {kssdtree-2.0.6 → kssdtree-2.0.8}/kssdheaders/command_composite.h +0 -0
  41. {kssdtree-2.0.6 → kssdtree-2.0.8}/kssdheaders/command_dist.h +0 -0
  42. {kssdtree-2.0.6 → kssdtree-2.0.8}/kssdheaders/command_dist_wrapper.h +0 -0
  43. {kssdtree-2.0.6 → kssdtree-2.0.8}/kssdheaders/command_set.h +0 -0
  44. {kssdtree-2.0.6 → kssdtree-2.0.8}/kssdheaders/command_shuffle.h +0 -0
  45. {kssdtree-2.0.6 → kssdtree-2.0.8}/kssdheaders/global_basic.h +0 -0
  46. {kssdtree-2.0.6 → kssdtree-2.0.8}/kssdheaders/iseq2comem.h +0 -0
  47. {kssdtree-2.0.6 → kssdtree-2.0.8}/kssdheaders/mman.h +0 -0
  48. {kssdtree-2.0.6 → kssdtree-2.0.8}/kssdheaders/mytime.h +0 -0
  49. {kssdtree-2.0.6 → kssdtree-2.0.8}/kssdtree.egg-info/SOURCES.txt +0 -0
  50. {kssdtree-2.0.6 → kssdtree-2.0.8}/kssdtree.egg-info/dependency_links.txt +0 -0
  51. {kssdtree-2.0.6 → kssdtree-2.0.8}/kssdtree.egg-info/not-zip-safe +0 -0
  52. {kssdtree-2.0.6 → kssdtree-2.0.8}/kssdtree.egg-info/requires.txt +0 -0
  53. {kssdtree-2.0.6 → kssdtree-2.0.8}/kssdtree.egg-info/top_level.txt +0 -0
  54. {kssdtree-2.0.6 → kssdtree-2.0.8}/kssdtree.py +0 -0
  55. {kssdtree-2.0.6 → kssdtree-2.0.8}/matrix.c +0 -0
  56. {kssdtree-2.0.6 → kssdtree-2.0.8}/mman.c +0 -0
  57. {kssdtree-2.0.6 → kssdtree-2.0.8}/mytime.c +0 -0
  58. {kssdtree-2.0.6 → kssdtree-2.0.8}/nj.c +0 -0
  59. {kssdtree-2.0.6 → kssdtree-2.0.8}/njheaders/align.h +0 -0
  60. {kssdtree-2.0.6 → kssdtree-2.0.8}/njheaders/buildtree.h +0 -0
  61. {kssdtree-2.0.6 → kssdtree-2.0.8}/njheaders/cluster.h +0 -0
  62. {kssdtree-2.0.6 → kssdtree-2.0.8}/njheaders/distancemat.h +0 -0
  63. {kssdtree-2.0.6 → kssdtree-2.0.8}/njheaders/sequence.h +0 -0
  64. {kssdtree-2.0.6 → kssdtree-2.0.8}/njheaders/tree.h +0 -0
  65. {kssdtree-2.0.6 → kssdtree-2.0.8}/njheaders/util.h +0 -0
  66. {kssdtree-2.0.6 → kssdtree-2.0.8}/nwck.c +0 -0
  67. {kssdtree-2.0.6 → kssdtree-2.0.8}/pherror.c +0 -0
  68. {kssdtree-2.0.6 → kssdtree-2.0.8}/phy.c +0 -0
  69. {kssdtree-2.0.6 → kssdtree-2.0.8}/pydnj.c +0 -0
  70. {kssdtree-2.0.6 → kssdtree-2.0.8}/pykssd.c +0 -0
  71. {kssdtree-2.0.6 → kssdtree-2.0.8}/pynj.c +0 -0
  72. {kssdtree-2.0.6 → kssdtree-2.0.8}/qseqs.c +0 -0
  73. {kssdtree-2.0.6 → kssdtree-2.0.8}/sequence.c +0 -0
  74. {kssdtree-2.0.6 → kssdtree-2.0.8}/setup.cfg +0 -0
  75. {kssdtree-2.0.6 → kssdtree-2.0.8}/str.c +0 -0
  76. {kssdtree-2.0.6 → kssdtree-2.0.8}/tmp.c +0 -0
  77. {kssdtree-2.0.6 → kssdtree-2.0.8}/tree.c +0 -0
  78. {kssdtree-2.0.6 → kssdtree-2.0.8}/util.c +0 -0
  79. {kssdtree-2.0.6 → kssdtree-2.0.8}/vector.c +0 -0
@@ -1,8 +1,12 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: kssdtree
3
- Version: 2.0.6
3
+ Version: 2.0.8
4
4
  Summary: Kssdtree is a versatile Python package for phylogenetic analysis. It also provides one-stop tree construction and visualization. It can handle DNA sequences of both fasta or fastq format, whether gzipped or not.
5
5
  Home-page: https://github.com/yhlink/kssdtree
6
6
  Download-URL: https://pypi.org/project/kssdtree
7
7
  Author: Hang Yang
8
8
  Author-email: yhlink1207@gmail.com
9
+ Requires-Dist: pyqt5
10
+ Requires-Dist: ete3
11
+ Requires-Dist: requests
12
+ Requires-Dist: pandas
@@ -0,0 +1,66 @@
1
+ # Kssdtree: an interactive Python package for phylogenetic analysis based on sketching technique
2
+ Kssdtree is a versatile Python package for phylogenetic analysis, offering three distinct pipelines: the Routine Pipeline, the Reference Subtraction Pipeline, and the GTDB-based Phylogenetic Placement Pipeline.
3
+
4
+ Routine Pipeline: A general-purpose tool for phylogenetic analysis of user genomic data.
5
+ Reference Subtraction Pipeline: Designed for intra-species phylogenomic analysis.
6
+ GTDB-based Phylogenetic Placement Pipeline: Facilitates the search for similar genomes in the Genome Taxonomy Database (GTDB), conducting phylogenetic analysis alongside these genomes and positioning the input genomes within the entire prokaryotic tree of life.
7
+ Kssdtree also provides one-stop tree construction and visualization. It can handle DNA sequences in both fasta and fastq formats, whether gzipped or not. Additionally, Kssdtree is compatible with multiple platforms (Linux, MacOS, and Windows) and can be run using Jupyter notebooks.
8
+ # 1. Installation
9
+ Kssdtree requires the Python 3 environment and the dependent packages pandas, pyqt5, ete3, and requests. If Kssdtree is installed using the pip command, these dependencies will be installed automatically. For MacOS, it requires Python 3.8 or higher version. For Windows, it requires Python 3.6 version and the installation of the gzip tool(https://gnuwin32.sourceforge.net/packages/gzip.htm) for sequence decompression.
10
+ ## 1.1 Linux
11
+
12
+ ```
13
+ pip install kssdtree
14
+ ```
15
+ ## 1.2 MacOS
16
+
17
+ ```
18
+ # (Optional) Install gcc (/opt/homebrew/bin/gcc-12)
19
+ brew install gcc@12
20
+
21
+ # Create a virtual environment
22
+ conda create --name=kssdtree python=3.10
23
+
24
+ # Activate the virtual environment
25
+ conda activate kssdtree
26
+
27
+ # Install kssdtree
28
+ pip install kssdtree
29
+ ```
30
+ ## 1.3 Windows
31
+
32
+ ```
33
+ # Create a virtual environment
34
+ conda create --name=kssdtree python=3.6.13
35
+
36
+ # Activate the virtual environment
37
+ conda activate kssdtree
38
+
39
+ # (Optional) Install libpython and m2w64-toolchain
40
+ conda install libpython m2w64-toolchain -c msys2
41
+
42
+ # Install kssdtree
43
+ pip install kssdtree
44
+ ```
45
+ # 2. Quick-Tutorial
46
+ ## 2.1 Routine Pipeline
47
+
48
+ ```
49
+ import kssdtree
50
+ kssdtree.quick(shuf_file='./shuf_files/L3K10.shuf', genome_files='your input genomes path', output='output.newick', method='nj', mode='r')
51
+ ```
52
+ ## 2.2 Reference Subtraction Pipeline
53
+
54
+ ```
55
+ import kssdtree
56
+ kssdtree.quick(shuf_file='./shuf_files/L3K10.shuf', genome_files='your input genomes path', output='output.newick', reference='your reference genome path', method='nj', mode='r')
57
+ ```
58
+ ## 2.3 GTDB-based Phylogenetic Placement Pipeline
59
+
60
+ ```
61
+ import kssdtree
62
+ kssdtree.quick(shuf_file='./shuf_files/L3K9.shuf', genome_files='your input genomes path', output='your output path', database='gtdbr214', method='nj', mode='r', N=30)
63
+ ```
64
+ More usages about Kssdtree, please see Kssdtree documentation (https://kssdtree.readthedocs.io/en/latest).
65
+ # 3. How to cite
66
+ Hang Yang, Xiaoxin Lu, Jiaxing Chang, Qing Chang, Wen Zheng, Zehua Chen, Huiguang Yi, Kssdtree: an interactive Python package for phylogenetic analysis based on sketching technique, Bioinformatics, Volume 40, Issue 10, October 2024, btae566, https://doi.org/10.1093/bioinformatics/btae566
@@ -309,7 +309,7 @@ const char *test_get_fullpath(const char *parent_path, const char *dstat_f) {
309
309
  return NULL;
310
310
  };
311
311
 
312
- const char gzpipe_cmc[] = "gzip -f";
312
+ //const char gzpipe_cmc[] = "gzip -f";
313
313
 
314
314
  const char *run_stageI(dist_opt_val_t *opt_val, infile_tab_t *seqfile_stat,
315
315
  int *shuffled_seqfname_ind, const char *co_dir, int p_fit_mem) {
@@ -327,18 +327,18 @@ const char *run_stageI(dist_opt_val_t *opt_val, infile_tab_t *seqfile_stat,
327
327
  }
328
328
  } else {
329
329
  int num_threads = seqfile_stat->infile_num > p_fit_mem ? p_fit_mem : 1;
330
- #ifdef _WIN32
331
- // printf("Windows\n");
332
- for (int i = 0; i < seqfile_stat->infile_num; i++) {
333
- char fas_fname[PATHLEN];
334
- char *seqfname = seqfile_stat->organized_infile_tab[shuffled_seqfname_ind[i]].fpath;
335
- if (strstr(seqfname, ".gz") == NULL) {
336
- sprintf(fas_fname, "%s %s", gzpipe_cmc, seqfname);
337
- popen(fas_fname, "r");
338
- seqfile_stat->organized_infile_tab[shuffled_seqfname_ind[i]].fpath = strcat(seqfname, ".gz");
339
- }
340
- }
341
- #endif
330
+ //#ifdef _WIN32
331
+ // printf("Windows\n");
332
+ // for (int i = 0; i < seqfile_stat->infile_num; i++) {
333
+ // char fas_fname[PATHLEN];
334
+ // char *seqfname = seqfile_stat->organized_infile_tab[shuffled_seqfname_ind[i]].fpath;
335
+ // if (strstr(seqfname, ".gz") == NULL) {
336
+ // sprintf(fas_fname, "%s %s", gzpipe_cmc, seqfname);
337
+ // popen(fas_fname, "r");
338
+ // seqfile_stat->organized_infile_tab[shuffled_seqfname_ind[i]].fpath = strcat(seqfname, ".gz");
339
+ // }
340
+ // }
341
+ //#endif
342
342
  #pragma omp parallel for num_threads(num_threads) reduction(+:all_ctx_ct) schedule(guided)
343
343
  for (int i = 0; i < seqfile_stat->infile_num; i++) {
344
344
  int tid = 0;
@@ -180,12 +180,23 @@ int reads2mco(char *seqfname, const char *co_dir, char *pipecmd) {
180
180
  printf("decomposing %s by reads is complete!\n", seqfname);
181
181
  return 1;
182
182
  }
183
+
184
+ int is_gz_file(const char *seqfname) {
185
+ if (seqfname == NULL) return 0;
186
+
187
+ size_t len = strlen(seqfname);
188
+ if (len < 3) return 0;
189
+
190
+ return strcmp(seqfname + len - 3, ".gz") == 0;
191
+ }
192
+
183
193
  #ifdef _WIN32
184
194
  const char gzpipe_cmd[] = "gzip -dc";
185
195
  #else
186
196
  const char gzpipe_cmd[] = "zcat -fc";
187
197
  #endif
188
198
  llong *fasta2co(char *seqfname, llong *co, char *pipecmd) {
199
+ printf("The fasta2co seqfname is: %s\n", seqfname);
189
200
  llong tuple = 0LLU, crvstuple = 0LLU,
190
201
  unituple, drtuple, pfilter;
191
202
  memset(co, 0LLU, hashsize * sizeof(llong));
@@ -196,7 +207,18 @@ llong *fasta2co(char *seqfname, llong *co, char *pipecmd) {
196
207
  sprintf(fas_fname, "%s %s", pipecmd, seqfname);
197
208
  else
198
209
  sprintf(fas_fname, "%s %s", gzpipe_cmd, seqfname);
199
- if ((infp = popen(fas_fname, "r")) == NULL) fprintf(stderr, "fasta2co():%s", fas_fname);
210
+ printf("The fasta2co fas_fname is: %s\n", fas_fname);
211
+ if (is_gz_file(seqfname)){
212
+ printf(".gz format\n");
213
+ if ((infp = popen(fas_fname, "r")) == NULL) fprintf(stderr, "fasta2co():%s", fas_fname, "\n");
214
+ }else{
215
+ printf("not .gz format\n");
216
+ #ifdef _WIN32
217
+ if ((infp = fopen(seqfname, "r")) == NULL) fprintf(stderr, "fasta2co():%s", fas_fname, "\n");
218
+ #else
219
+ if ((infp = popen(fas_fname, "r")) == NULL) fprintf(stderr, "fasta2co():%s", fas_fname, "\n");
220
+ #endif
221
+ }
200
222
  int newLen = fread(seqin_buff, sizeof(char), READSEQ_BUFFSZ, infp);
201
223
  if (!(newLen > 0)) fprintf(stderr, "fastco():eof or fread error file=%s", seqfname);
202
224
  llong base = 1;
@@ -269,6 +291,7 @@ llong *fasta2co(char *seqfname, llong *co, char *pipecmd) {
269
291
  #define CT_MAX 0xfLLU
270
292
 
271
293
  llong *fastq2co(char *seqfname, llong *co, char *pipecmd, int Q, int M) {
294
+ printf("The fastq2co seqfname is: %s\n", seqfname);
272
295
  if (M >= CT_MAX) fprintf(stderr, "fastq2co(): Occurence num should smaller than %d", (int) CT_MAX);
273
296
  llong tuple = 0LLU, crvstuple = 0LLU, unituple, drtuple, pfilter;
274
297
  memset(co, 0LLU, hashsize * sizeof(llong));
@@ -278,7 +301,18 @@ llong *fastq2co(char *seqfname, llong *co, char *pipecmd, int Q, int M) {
278
301
  sprintf(fq_fname, "%s %s", pipecmd, seqfname);
279
302
  else
280
303
  sprintf(fq_fname, "%s %s", gzpipe_cmd, seqfname);
281
- if ((infp = popen(fq_fname, "r")) == NULL) fprintf(stderr, "fastq2co():%s", fq_fname);
304
+ printf("The fastq2co fq_fname is: %s\n", fq_fname);
305
+ if (is_gz_file(seqfname)){
306
+ printf(".gz format\n");
307
+ if ((infp = popen(fq_fname, "r")) == NULL) fprintf(stderr, "fastq2co():%s", fq_fname, "\n");
308
+ }else{
309
+ printf("not .gz format\n");
310
+ #ifdef _WIN32
311
+ if ((infp = fopen(seqfname, "r")) == NULL) fprintf(stderr, "fastq2co():%s", fq_fname, "\n");
312
+ #else
313
+ if ((infp = popen(fq_fname, "r")) == NULL) fprintf(stderr, "fastq2co():%s", fq_fname, "\n");
314
+ #endif
315
+ }
282
316
  char *seq = malloc(LEN + 10);
283
317
  char *qual = malloc(LEN + 10);
284
318
  fgets(seq, LEN, infp);
@@ -354,6 +388,7 @@ llong *fastq2co(char *seqfname, llong *co, char *pipecmd, int Q, int M) {
354
388
  #define OCCRC_MAX 0xffffLLU
355
389
 
356
390
  llong *fastq2koc(char *seqfname, llong *co, char *pipecmd, int Q) {
391
+ printf("The fastq2koc seqfname is: %s\n", seqfname);
357
392
  llong tuple = 0LLU, crvstuple = 0LLU, unituple, drtuple, pfilter;
358
393
  memset(co, 0LLU, hashsize * sizeof(llong));
359
394
  FILE *infp;
@@ -362,7 +397,18 @@ llong *fastq2koc(char *seqfname, llong *co, char *pipecmd, int Q) {
362
397
  sprintf(fq_fname, "%s %s", pipecmd, seqfname);
363
398
  else
364
399
  sprintf(fq_fname, "%s %s", gzpipe_cmd, seqfname);
365
- if ((infp = popen(fq_fname, "r")) == NULL) fprintf(stderr, "fastq2koc():%s", fq_fname);
400
+ printf("The fastq2koc fq_fname is: %s\n", fq_fname);
401
+ if (is_gz_file(seqfname)){
402
+ printf(".gz format\n");
403
+ if ((infp = popen(fq_fname, "r")) == NULL) fprintf(stderr, "fastq2koc():%s", fq_fname, "\n");
404
+ }else{
405
+ printf("not .gz format\n");
406
+ #ifdef _WIN32
407
+ if ((infp = fopen(seqfname, "r")) == NULL) fprintf(stderr, "fastq2koc():%s", fq_fname, "\n");
408
+ #else
409
+ if ((infp = popen(fq_fname, "r")) == NULL) fprintf(stderr, "fastq2koc():%s", fq_fname, "\n");
410
+ #endif
411
+ }
366
412
  char *seq = malloc(LEN + 10);
367
413
  char *qual = malloc(LEN + 10);
368
414
  fgets(seq, LEN, infp);
@@ -1,8 +1,12 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: kssdtree
3
- Version: 2.0.6
3
+ Version: 2.0.8
4
4
  Summary: Kssdtree is a versatile Python package for phylogenetic analysis. It also provides one-stop tree construction and visualization. It can handle DNA sequences of both fasta or fastq format, whether gzipped or not.
5
5
  Home-page: https://github.com/yhlink/kssdtree
6
6
  Download-URL: https://pypi.org/project/kssdtree
7
7
  Author: Hang Yang
8
8
  Author-email: yhlink1207@gmail.com
9
+ Requires-Dist: pyqt5
10
+ Requires-Dist: ete3
11
+ Requires-Dist: requests
12
+ Requires-Dist: pandas
@@ -87,7 +87,7 @@ require_pakages = [
87
87
 
88
88
  setup(
89
89
  name='kssdtree',
90
- version='2.0.6',
90
+ version='2.0.8',
91
91
  author='Hang Yang',
92
92
  author_email='yhlink1207@gmail.com',
93
93
  description="Kssdtree is a versatile Python package for phylogenetic analysis. It also provides one-stop tree construction and visualization. It can handle DNA sequences of both fasta or fastq format, whether gzipped or not. ",
@@ -213,7 +213,7 @@ def view_tree(newick, taxonomy, mode):
213
213
  with open(taxonomy_path, 'r') as file:
214
214
  for line in file:
215
215
  columns = line.split()
216
- if len(columns) == 2:
216
+ if len(columns) > 1:
217
217
  column_1 = columns[0]
218
218
  column_2 = columns[1:]
219
219
  tempfile = ''
kssdtree-2.0.6/README.md DELETED
@@ -1,8 +0,0 @@
1
- Kssdtree is a versatile Python package for phylogenetic analysis, offering three distinct pipelines: the Routine Pipeline, the Reference Subtraction Pipeline, and the GTDB-based Phylogenetic Placement Pipeline.
2
-
3
- Routine Pipeline: A general-purpose tool for phylogenetic analysis of user genomic data.
4
- Reference Subtraction Pipeline: Designed for intra-species phylogenomic analysis.
5
- GTDB-based Phylogenetic Placement Pipeline: Facilitates the search for similar genomes in the Genome Taxonomy Database (GTDB), conducting phylogenetic analysis alongside these genomes and positioning the input genomes within the entire prokaryotic tree of life.
6
- Kssdtree also provides one-stop tree construction and visualization. It can handle DNA sequences in both fasta and fastq formats, whether gzipped or not. Additionally, Kssdtree is compatible with multiple platforms (Linux, MacOS, and Windows) and can be run using Jupyter notebooks.
7
-
8
- More usages about Kssdtree, please see Kssdtree documentation (https://kssdtree.readthedocs.io/en/latest).
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes