FunVIP 0.4.0__tar.gz → 0.5.0__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 (228) hide show
  1. {funvip-0.4.0 → funvip-0.5.0}/FunVIP.egg-info/PKG-INFO +4 -3
  2. {funvip-0.4.0 → funvip-0.5.0}/FunVIP.egg-info/SOURCES.txt +4 -0
  3. {funvip-0.4.0 → funvip-0.5.0}/FunVIP.egg-info/requires.txt +1 -1
  4. {funvip-0.4.0 → funvip-0.5.0}/PKG-INFO +4 -3
  5. {funvip-0.4.0 → funvip-0.5.0}/README.md +30 -8
  6. funvip-0.5.0/funvip/external/modeltest-ng_Windows/cyggcc_s-seh-1.dll +0 -0
  7. funvip-0.5.0/funvip/external/modeltest-ng_Windows/cygstdc++-6.dll +0 -0
  8. funvip-0.5.0/funvip/external/modeltest-ng_Windows/cygwin1.dll +0 -0
  9. funvip-0.5.0/funvip/external/modeltest-ng_Windows/modeltest-ng.exe +0 -0
  10. {funvip-0.4.0 → funvip-0.5.0}/funvip/main.py +21 -0
  11. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/cluster.py +43 -19
  12. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/command.py +7 -2
  13. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/dataset.py +36 -1
  14. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/ext.py +9 -2
  15. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/modeltest.py +4 -1
  16. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/tree_interpretation.py +26 -139
  17. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/tree_interpretation_pipe.py +0 -11
  18. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/validate_option.py +30 -13
  19. funvip-0.5.0/funvip/test_dataset/penicillium/DB/DB_Penicillium.xlsx +0 -0
  20. {funvip-0.4.0 → funvip-0.5.0}/pyproject.toml +2 -2
  21. funvip-0.4.0/funvip/test_dataset/penicillium/DB/DB_Penicillium.xlsx +0 -0
  22. {funvip-0.4.0 → funvip-0.5.0}/FunVIP.egg-info/dependency_links.txt +0 -0
  23. {funvip-0.4.0 → funvip-0.5.0}/FunVIP.egg-info/entry_points.txt +0 -0
  24. {funvip-0.4.0 → funvip-0.5.0}/FunVIP.egg-info/top_level.txt +0 -0
  25. {funvip-0.4.0 → funvip-0.5.0}/LICENSE +0 -0
  26. {funvip-0.4.0 → funvip-0.5.0}/MANIFEST.in +0 -0
  27. {funvip-0.4.0 → funvip-0.5.0}/funvip/FunVIP_GUI.py +0 -0
  28. {funvip-0.4.0 → funvip-0.5.0}/funvip/__init__.py +0 -0
  29. {funvip-0.4.0 → funvip-0.5.0}/funvip/data/Option_manager.xlsx +0 -0
  30. {funvip-0.4.0 → funvip-0.5.0}/funvip/data/__init__.py +0 -0
  31. {funvip-0.4.0 → funvip-0.5.0}/funvip/data/genus_line.txt +0 -0
  32. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/BLAST_Windows/Uninstall-ncbi-blast-2.12.0+.exe +0 -0
  33. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/BLAST_Windows/bin/blastn.exe +0 -0
  34. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/BLAST_Windows/bin/cleanup-blastdb-volumes.py +0 -0
  35. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/BLAST_Windows/bin/get_species_taxids.sh +0 -0
  36. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/BLAST_Windows/bin/legacy_blast.pl +0 -0
  37. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/BLAST_Windows/bin/makeblastdb.exe +0 -0
  38. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/BLAST_Windows/bin/nghttp2.dll +0 -0
  39. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/BLAST_Windows/bin/update_blastdb.pl +0 -0
  40. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/BLAST_Windows/doc/README.txt +0 -0
  41. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/FastTree_Windows/FastTree.exe +0 -0
  42. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/Gblocks_Windows_0.91b/Gblocks_0.91b/Documentation/Gblocks_documentation.html +0 -0
  43. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/Gblocks_Windows_0.91b/Gblocks_0.91b/Gblocks.exe +0 -0
  44. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/Gblocks_Windows_0.91b/Gblocks_0.91b/more_alignments/cox2.pir +0 -0
  45. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/Gblocks_Windows_0.91b/Gblocks_0.91b/more_alignments/cytb.pir +0 -0
  46. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/Gblocks_Windows_0.91b/Gblocks_0.91b/more_alignments/nad3.pir +0 -0
  47. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/Gblocks_Windows_0.91b/Gblocks_0.91b/more_alignments/nad5.pir +0 -0
  48. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/Gblocks_Windows_0.91b/Gblocks_0.91b/nad3.pir +0 -0
  49. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/Gblocks_Windows_0.91b/Gblocks_0.91b/paths +0 -0
  50. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/MAFFT_LICENSE +0 -0
  51. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/MAFFT_Windows.zip +0 -0
  52. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/RAxML_Windows/GPL-3.0.txt +0 -0
  53. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/RAxML_Windows/README +0 -0
  54. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/RAxML_Windows/raxmlHPC-PTHREADS-AVX2.exe +0 -0
  55. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/__init__.py +0 -0
  56. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/iqtree/bin/iqtree2-click.exe +0 -0
  57. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/iqtree/bin/iqtree2.exe +0 -0
  58. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/iqtree/bin/libiomp5md.dll +0 -0
  59. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/iqtree/example.cf +0 -0
  60. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/iqtree/example.nex +0 -0
  61. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/iqtree/example.phy +0 -0
  62. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/iqtree/models.nex +0 -0
  63. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/LICENSE.md +0 -0
  64. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/README.md +0 -0
  65. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/bin/busybox.exe +0 -0
  66. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/bin/cygbz2-1.dll +0 -0
  67. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/bin/cyggcc_s-seh-1.dll +0 -0
  68. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/bin/cyggomp-1.dll +0 -0
  69. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/bin/cygstdc++-6.dll +0 -0
  70. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/bin/cygwin1.dll +0 -0
  71. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/bin/cygz.dll +0 -0
  72. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/bin/mmseqs.exe +0 -0
  73. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/examples/QUERY.fasta +0 -0
  74. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/PAM10.out +0 -0
  75. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/PAM100.out +0 -0
  76. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/PAM110.out +0 -0
  77. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/PAM120.out +0 -0
  78. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/PAM130.out +0 -0
  79. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/PAM140.out +0 -0
  80. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/PAM150.out +0 -0
  81. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/PAM160.out +0 -0
  82. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/PAM170.out +0 -0
  83. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/PAM180.out +0 -0
  84. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/PAM190.out +0 -0
  85. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/PAM20.out +0 -0
  86. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/PAM30.out +0 -0
  87. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/PAM40.out +0 -0
  88. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/PAM50.out +0 -0
  89. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/PAM60.out +0 -0
  90. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/PAM70.out +0 -0
  91. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/PAM80.out +0 -0
  92. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/PAM90.out +0 -0
  93. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/VTML10.out +0 -0
  94. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/VTML120.out +0 -0
  95. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/VTML160.out +0 -0
  96. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/VTML20.out +0 -0
  97. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/VTML40.out +0 -0
  98. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/VTML80.out +0 -0
  99. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/blosum100.out +0 -0
  100. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/blosum30.out +0 -0
  101. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/blosum35.out +0 -0
  102. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/blosum40.out +0 -0
  103. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/blosum45.out +0 -0
  104. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/blosum50.out +0 -0
  105. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/blosum55.out +0 -0
  106. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/blosum60.out +0 -0
  107. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/blosum62.out +0 -0
  108. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/blosum65.out +0 -0
  109. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/blosum70.out +0 -0
  110. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/blosum75.out +0 -0
  111. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/blosum80.out +0 -0
  112. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/blosum85.out +0 -0
  113. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/blosum90.out +0 -0
  114. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/blosum95.out +0 -0
  115. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/matrices/nucleotide.out +0 -0
  116. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/mmseqs.bat +0 -0
  117. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/mmseqs_Windows/util/bash-completion.sh +0 -0
  118. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/AUTHORS +0 -0
  119. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/CHANGELOG +0 -0
  120. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/LICENSE +0 -0
  121. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/README +0 -0
  122. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/bin/libgcc_s_dw2-1.dll +0 -0
  123. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/bin/libstdc++-6.dll +0 -0
  124. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/bin/trimal.exe +0 -0
  125. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/scripts/check_codon_alignments.py +0 -0
  126. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/scripts/compare_trimmed_msas.sh +0 -0
  127. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/scripts/generateRandomAlignmentsUsingAsSeedRealAlignments.py +0 -0
  128. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/scripts/generate_trimmed_msas.sh +0 -0
  129. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/scripts/get_sequence_representative_from_alignment.py +0 -0
  130. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/scripts/get_sequences_gaps_ratio.py +0 -0
  131. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/scripts/remove_shorter_sequences.py +0 -0
  132. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/scripts/selective_trimming_for_dNdS_analyses.based_neighbours.py +0 -0
  133. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/scripts/set_manual_boundaries.py +0 -0
  134. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/alignment.cpp +0 -0
  135. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/alignment.h +0 -0
  136. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/alignment.o +0 -0
  137. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/autAlignment.cpp +0 -0
  138. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/autAlignment.o +0 -0
  139. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/compareFiles.cpp +0 -0
  140. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/compareFiles.h +0 -0
  141. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/compareFiles.o +0 -0
  142. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/defines.h +0 -0
  143. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/main.cpp +0 -0
  144. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/makefile +0 -0
  145. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/makefile.MacOS +0 -0
  146. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/readAl.cpp +0 -0
  147. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/readal.exe +0 -0
  148. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/rwAlignment.cpp +0 -0
  149. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/rwAlignment.o +0 -0
  150. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/sequencesMatrix.cpp +0 -0
  151. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/sequencesMatrix.h +0 -0
  152. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/sequencesMatrix.o +0 -0
  153. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/similarityMatrix.cpp +0 -0
  154. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/similarityMatrix.h +0 -0
  155. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/similarityMatrix.o +0 -0
  156. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/statAl.cpp +0 -0
  157. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/statal.exe +0 -0
  158. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/statisticsConservation.cpp +0 -0
  159. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/statisticsConservation.h +0 -0
  160. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/statisticsConservation.o +0 -0
  161. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/statisticsFiles.cpp +0 -0
  162. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/statisticsFiles.h +0 -0
  163. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/statisticsGaps.cpp +0 -0
  164. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/statisticsGaps.h +0 -0
  165. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/statisticsGaps.o +0 -0
  166. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/utils.cpp +0 -0
  167. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/utils.h +0 -0
  168. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/utils.o +0 -0
  169. {funvip-0.4.0 → funvip-0.5.0}/funvip/external/trimal.v1.4/trimAl/source/values.h +0 -0
  170. {funvip-0.4.0 → funvip-0.5.0}/funvip/preset/.gitignore +0 -0
  171. {funvip-0.4.0 → funvip-0.5.0}/funvip/preset/accurate.yaml +0 -0
  172. {funvip-0.4.0 → funvip-0.5.0}/funvip/preset/fast.yaml +0 -0
  173. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/.gitignore +0 -0
  174. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/__init__.py +0 -0
  175. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/__pycache__/CATV_pipe.cpython-310.pyc +0 -0
  176. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/__pycache__/CAT_V.cpython-310.pyc +0 -0
  177. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/__pycache__/CAT_V.cpython-39.pyc +0 -0
  178. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/__pycache__/CAT_V_pipe.cpython-39.pyc +0 -0
  179. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/__pycache__/__init__.cpython-310.pyc +0 -0
  180. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/__pycache__/__init__.cpython-39.pyc +0 -0
  181. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/__pycache__/align.cpython-310.pyc +0 -0
  182. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/__pycache__/cluster.cpython-39.pyc +0 -0
  183. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/__pycache__/dataset.cpython-39.pyc +0 -0
  184. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/__pycache__/ext.cpython-310.pyc +0 -0
  185. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/__pycache__/ext.cpython-39.pyc +0 -0
  186. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/__pycache__/hasher.cpython-39.pyc +0 -0
  187. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/__pycache__/initialize.cpython-39.pyc +0 -0
  188. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/__pycache__/io.cpython-310.pyc +0 -0
  189. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/__pycache__/io.cpython-39.pyc +0 -0
  190. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/__pycache__/logger.cpython-39.pyc +0 -0
  191. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/__pycache__/modeltest.cpython-39.pyc +0 -0
  192. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/__pycache__/multigene.cpython-39.pyc +0 -0
  193. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/__pycache__/ncbi.cpython-39.pyc +0 -0
  194. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/__pycache__/opt_generator.cpython-39.pyc +0 -0
  195. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/__pycache__/reporter.cpython-39.pyc +0 -0
  196. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/__pycache__/search.cpython-39.pyc +0 -0
  197. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/__pycache__/tool.cpython-39.pyc +0 -0
  198. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/__pycache__/validation.cpython-39.pyc +0 -0
  199. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/__pycache__/visualize.cpython-39.pyc +0 -0
  200. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/align.py +0 -0
  201. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/concatenate.py +0 -0
  202. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/hasher.py +0 -0
  203. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/initialize.py +0 -0
  204. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/logger.py +0 -0
  205. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/logics.py +0 -0
  206. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/ncbi.py +0 -0
  207. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/opt_generator.py +0 -0
  208. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/reporter.py +0 -0
  209. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/save.py +0 -0
  210. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/search.py +0 -0
  211. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/templates/template.html +0 -0
  212. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/tool.py +0 -0
  213. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/tree.py +0 -0
  214. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/trim.py +0 -0
  215. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/validate_input.py +0 -0
  216. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/validation.py +0 -0
  217. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/version.py +0 -0
  218. {funvip-0.4.0 → funvip-0.5.0}/funvip/src/visualize.py +0 -0
  219. {funvip-0.4.0 → funvip-0.5.0}/funvip/test_dataset/penicillium/Options.config +0 -0
  220. {funvip-0.4.0 → funvip-0.5.0}/funvip/test_dataset/penicillium/Query/Query.xlsx +0 -0
  221. {funvip-0.4.0 → funvip-0.5.0}/funvip/test_dataset/penicillium/preset.yaml +0 -0
  222. {funvip-0.4.0 → funvip-0.5.0}/funvip/test_dataset/sanghuangporus/DB/FunVIP_Sanghuangporus_db.xlsx +0 -0
  223. {funvip-0.4.0 → funvip-0.5.0}/funvip/test_dataset/sanghuangporus/Query/FunVIP_Sanghuangporus_query.xlsx +0 -0
  224. {funvip-0.4.0 → funvip-0.5.0}/funvip/test_dataset/sanghuangporus/preset.yaml +0 -0
  225. {funvip-0.4.0 → funvip-0.5.0}/funvip/test_dataset/terrei/DB/FunVIP_Aspergillus_db.xlsx +0 -0
  226. {funvip-0.4.0 → funvip-0.5.0}/funvip/test_dataset/terrei/Query/FunVIP_Aspergillus_query.xlsx +0 -0
  227. {funvip-0.4.0 → funvip-0.5.0}/funvip/test_dataset/terrei/preset.yaml +0 -0
  228. {funvip-0.4.0 → funvip-0.5.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: FunVIP
3
- Version: 0.4.0
3
+ Version: 0.5.0
4
4
  Summary: Fungal Validation & Identification Pipeline
5
5
  Author-email: Changwan Seo <wan101010@snu.ac.kr>
6
6
  License: GPL-3.0
@@ -11,7 +11,7 @@ Requires-Dist: biopython==1.84
11
11
  Requires-Dist: ete3==3.1.3
12
12
  Requires-Dist: Cython
13
13
  Requires-Dist: dendropy
14
- Requires-Dist: GenMine<1.2.0,>=1.1.0
14
+ Requires-Dist: GenMine<1.4.0,>=1.3.0
15
15
  Requires-Dist: lxml
16
16
  Requires-Dist: matplotlib
17
17
  Requires-Dist: numpy<2.0.0
@@ -28,3 +28,4 @@ Requires-Dist: xlrd==2.0.1
28
28
  Requires-Dist: xlsxwriter
29
29
  Requires-Dist: xmltodict==0.12.0
30
30
  Requires-Dist: PyQt5>=5.15.0; sys_platform != "darwin"
31
+ Dynamic: license-file
@@ -100,6 +100,10 @@ funvip/external/mmseqs_Windows/matrices/blosum90.out
100
100
  funvip/external/mmseqs_Windows/matrices/blosum95.out
101
101
  funvip/external/mmseqs_Windows/matrices/nucleotide.out
102
102
  funvip/external/mmseqs_Windows/util/bash-completion.sh
103
+ funvip/external/modeltest-ng_Windows/cyggcc_s-seh-1.dll
104
+ funvip/external/modeltest-ng_Windows/cygstdc++-6.dll
105
+ funvip/external/modeltest-ng_Windows/cygwin1.dll
106
+ funvip/external/modeltest-ng_Windows/modeltest-ng.exe
103
107
  funvip/external/trimal.v1.4/trimAl/AUTHORS
104
108
  funvip/external/trimal.v1.4/trimAl/CHANGELOG
105
109
  funvip/external/trimal.v1.4/trimAl/LICENSE
@@ -2,7 +2,7 @@ biopython==1.84
2
2
  ete3==3.1.3
3
3
  Cython
4
4
  dendropy
5
- GenMine<1.2.0,>=1.1.0
5
+ GenMine<1.4.0,>=1.3.0
6
6
  lxml
7
7
  matplotlib
8
8
  numpy<2.0.0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: FunVIP
3
- Version: 0.4.0
3
+ Version: 0.5.0
4
4
  Summary: Fungal Validation & Identification Pipeline
5
5
  Author-email: Changwan Seo <wan101010@snu.ac.kr>
6
6
  License: GPL-3.0
@@ -11,7 +11,7 @@ Requires-Dist: biopython==1.84
11
11
  Requires-Dist: ete3==3.1.3
12
12
  Requires-Dist: Cython
13
13
  Requires-Dist: dendropy
14
- Requires-Dist: GenMine<1.2.0,>=1.1.0
14
+ Requires-Dist: GenMine<1.4.0,>=1.3.0
15
15
  Requires-Dist: lxml
16
16
  Requires-Dist: matplotlib
17
17
  Requires-Dist: numpy<2.0.0
@@ -28,3 +28,4 @@ Requires-Dist: xlrd==2.0.1
28
28
  Requires-Dist: xlsxwriter
29
29
  Requires-Dist: xmltodict==0.12.0
30
30
  Requires-Dist: PyQt5>=5.15.0; sys_platform != "darwin"
31
+ Dynamic: license-file
@@ -1,29 +1,46 @@
1
1
 
2
2
  # FunVIP [![DOI](https://zenodo.org/badge/588465720.svg)](https://zenodo.org/doi/10.5281/zenodo.10714946)
3
+
4
+
5
+ FunVIP is now published please cite:
6
+ #### Seo CW, Yoo S, Cho Y, Kim JS, Steinegger M, Lim YW. FunVIP: Fungal Validation and Identification Pipeline based on phylogenetic analysis. J. Microbiol. 2025;63(4):e2411017.
7
+ <br><br/>
8
+
9
+
10
+
11
+
3
12
  ### **Fun**gal **V**alidation & **I**dentification **P**ipeline
4
13
  #### An automatic tree-based sequence identification and validation pipeline for fungal (or maybe other) species
5
14
 
15
+
16
+
6
17
  - Automatic tree-based identification
7
- - Works with multigene
8
- - Data validation algorithm implemented
18
+ - Works with multiple genetic marker
19
+ - Database sequence validation algorithm implemented
9
20
 
10
21
  ![figure1 - ver17A](https://github.com/user-attachments/assets/22a50a62-14e8-41a7-87a0-8f5a1f9c3f62)
11
22
 
12
- This is Beta release. Bug reports are welcomed
23
+ Bug reports are always welcomed
13
24
  <br><br/>
14
25
 
26
+
27
+
28
+ #### IMPORTANT NOTICE: The python dependency for Linux platform has changed from 3.12 to 3.11 for TCS inclusion. Please remake conda environment for FunVIP 0.3.25 update
29
+
15
30
  ## Tutorial
16
31
  * [Part 1 - Getting started!](https://github.com/Changwanseo/FunVIP/blob/main/tutorial/tutorial.md)
17
32
  * [Part 2 - Preparing database and query](https://github.com/Changwanseo/FunVIP/blob/main/tutorial/tutorial2.md)
18
- * [Advacned tips](https://github.com/Changwanseo/FunVIP/blob/main/tutorial/advanced.md)
33
+ * [Advanced tips](https://github.com/Changwanseo/FunVIP/blob/main/tutorial/advanced.md)
19
34
  <br><br/>
20
35
  ## Documentation
21
36
  * See [Documentation](https://github.com/Changwanseo/FunVIP/blob/main/Documentation.md) for advanced usage !
22
37
  <br><br/>
23
38
  ## Requirements
24
- - Conda environment
39
+ - Conda or Mamba environment
25
40
 
26
- \* See [https://www.anaconda.com/products/individual](https://conda.io/projects/conda/en/latest/user-guide/install/index.html) for how to install conda environment
41
+ \* See [here](https://conda.io/projects/conda/en/latest/user-guide/install/index.html) for how to install conda environment
42
+
43
+ \* Recently, Mamba is a lot faster than conda. See [here](https://github.com/conda-forge/miniforge?tab=readme-ov-file) to how to install mamba environment
27
44
  <br><br/>
28
45
  ## Installation
29
46
  * [Windows](https://github.com/Changwanseo/FunVIP/blob/main/tutorial/installation.md##Windows)
@@ -77,9 +94,14 @@ tabular (```.xlsx```, ```.csv```, ```.parquet```, ```.ftr```) form
77
94
  * ```/Tree/{section}_{gene}.svg``` : Final collapsed tree in svg format. Can be edited in vector graphics programs, or in powerpoint (by ungroup)
78
95
  * ```/Tree/{section}_{gene}_original.svg ``` : Uncollapsed tree for inspection
79
96
 
97
+ * Example output tree of FunVIP
98
+ ![image](https://github.com/user-attachments/assets/7291c990-62d0-4579-8ae7-adc5d39a7fed)
99
+
100
+
101
+
80
102
  ## Scheduling
81
- 1. Beta release part 1 (2023 Feburary ~ As paper published, ver 0.3)
82
- Will be tested by our lab memebers to fix bugs and advance features
103
+ 1. ~~Beta release part 1 (2023 Feburary ~ As paper published, ver 0.3)
104
+ Will be tested by our lab memebers to fix bugs and advance features~~
83
105
  2. Beta release part 2 (As paper published ~ When pipeline gets stabled, ver 0.4)
84
106
  Will be tested by peer taxonomists
85
107
  3. Stable release (ver 1.0)
@@ -410,3 +410,24 @@ def main():
410
410
  logging.info(f"Time report generation: {round(time_end-time_visualize,3)}s")
411
411
  except:
412
412
  logging.warning(f"Failed logging reoprt generation time")
413
+
414
+ # At the end of the run, print critical messages once again to be noticed
415
+ with open(path.criticallog, "r") as frclog:
416
+ critical_log_lines = frclog.readlines()
417
+
418
+ critical_logs = []
419
+ flag_critical = 0
420
+ for line in critical_log_lines:
421
+ if "[CRITICAL]" in line:
422
+ flag_critical = 1
423
+ elif "[WARNING]" in line or "[ERROR]" in line:
424
+ flag_critical = 0
425
+
426
+ if flag_critical == 1:
427
+ critical_logs.append(line)
428
+
429
+ if len(critical_logs) > 0:
430
+ print("\n!!!<<<IMPORTANT NOTICE FROM FUNVIP RUN>>>!!!")
431
+
432
+ for line in critical_logs:
433
+ print(line)
@@ -114,6 +114,7 @@ def assign_gene(result_dict, V, cutoff=0.99):
114
114
  return V
115
115
 
116
116
 
117
+ # This function assigns group to each FI
117
118
  def cluster(FI, V_list_group, V_cSR, path, opt):
118
119
  # Reduce memory by focusing on relevant rows
119
120
  df_search = V_cSR[V_cSR["qseqid"] == FI.hash]
@@ -222,23 +223,23 @@ def append_outgroup(V_list_FI, df_search, gene, group, path, opt):
222
223
  # split that same group to include all to alignment, and leave other groups for outgroup selection
223
224
  cutoff_df = cutoff_df[cutoff_df["subject_group"] != group]
224
225
 
225
- ## For ambiugous database, mostly because of contaminated database
226
+ ## Add suspicious database, mostly because of contaminated database
227
+ # Use term "ambiguous" instead of "suspicious" because of previous compatibility
226
228
  # For each of the input, should use different cutoff
227
229
  ambiguous_db = set()
228
- for qseqid, _df in cutoff_set_df.groupby(["qseqid"]):
229
- # Select dataframe corresponding to current qseqid
230
- df_qseqid = df_search[df_search["qseqid"] == qseqid]
231
- """
232
- print(
233
- f"Ambiguous ingroup cutoff selected for query {qseqid} group {group} gene {gene} cutoff {min(list(_df['bitscore']))}"
234
- )
235
- """
236
- # Get the list of subjects, which is closer than furtest ingroup
237
- ambiguous_df = df_qseqid[df_qseqid["bitscore"] >= min(list(_df["bitscore"]))]
238
- # Within the furthest match, get possible ingroups with ambiguous group
239
- ambiguous_df = ambiguous_df[ambiguous_df["subject_group"] != group]
240
- # Add inner ambiugities to ambiguous db
241
- ambiguous_db.update([FI_dict[i] for i in list(ambiguous_df["sseqid"])])
230
+ if opt.suspicious is True:
231
+ for qseqid, _df in cutoff_set_df.groupby(["qseqid"]):
232
+ # Select dataframe corresponding to current qseqid
233
+ df_qseqid = df_search[df_search["qseqid"] == qseqid[0]]
234
+
235
+ # Get the list of subjects, which is closer than furtest ingroup
236
+ ambiguous_df = df_qseqid[
237
+ df_qseqid["bitscore"] >= min(list(_df["bitscore"]))
238
+ ]
239
+ # Within the furthest match, get possible ingroups with ambiguous group
240
+ ambiguous_df = ambiguous_df[ambiguous_df["subject_group"] != group]
241
+ # Add inner ambiugities to ambiguous db
242
+ ambiguous_db.update([FI_dict[i] for i in list(ambiguous_df["sseqid"])])
242
243
 
243
244
  ambiguous_db = list(ambiguous_db)
244
245
 
@@ -308,12 +309,20 @@ def append_outgroup(V_list_FI, df_search, gene, group, path, opt):
308
309
  f"Outgroup [{subject_group}] selected to [{group}]\n {text_outgroup_list}"
309
310
  )
310
311
 
312
+ # Move outgroup within ambiguous db to outgroup
313
+ for FI in ambiguous_db:
314
+ if FI.group == subject_group:
315
+ ambiguous_db.remove(FI)
316
+ outgroup_dict[subject_group].append(FI)
317
+
311
318
  return (
312
319
  group,
313
320
  gene,
314
321
  outgroup_dict[subject_group],
315
322
  ambiguous_db,
316
323
  )
324
+
325
+ # If not use the outgroup sequences with the maximum number
317
326
  else:
318
327
  if len(outgroup_dict[subject_group]) > max_cnt:
319
328
  max_cnt = len(outgroup_dict[subject_group])
@@ -330,6 +339,12 @@ def append_outgroup(V_list_FI, df_search, gene, group, path, opt):
330
339
  f"Final outgroup selection for group {group} : {outgroup_dict[max_group]}"
331
340
  )
332
341
 
342
+ # Move outgroup within ambiguous db to outgroup
343
+ for FI in ambiguous_db:
344
+ if FI.group == max_group:
345
+ ambiguous_db.remove(FI)
346
+ outgroup_dict[max_group].append(FI)
347
+
333
348
  return (group, gene, outgroup_dict[max_group], ambiguous_db)
334
349
 
335
350
  # If outgroup cannot be selected
@@ -507,6 +522,7 @@ def pipe_append_outgroup(V, path, opt):
507
522
 
508
523
  # append outgroup by running result
509
524
  # (group, gene, outgroup, ambiguous_group)
525
+ critical_flag = 0
510
526
  for result in result_append_outgroup:
511
527
  # Parsing result
512
528
  group = result[0]
@@ -524,9 +540,10 @@ def pipe_append_outgroup(V, path, opt):
524
540
  print(f"query: {len(V.dict_dataset[group][gene].list_qr_FI)}")
525
541
 
526
542
  if len(outgroup) == 0 and len(ambiguous_group) == 0:
527
- logging.warning(
543
+ logging.critical(
528
544
  f"Removing {group} {gene} from analysis because outgroup cannot be selected"
529
545
  )
546
+ critical_flag = 1
530
547
  V.dict_dataset[group].pop(gene, None)
531
548
  elif (
532
549
  len(outgroup)
@@ -535,15 +552,17 @@ def pipe_append_outgroup(V, path, opt):
535
552
  + len(V.dict_dataset[group][gene].list_qr_FI)
536
553
  < 4
537
554
  ):
538
- logging.warning(
555
+ logging.critical(
539
556
  f"Removing {group} {gene} from analysis because not enough sequences are provided to infer phylogenetic tree"
540
557
  )
558
+ critical_flag = 1
541
559
  V.dict_dataset[group].pop(gene, None)
542
560
 
543
561
  else:
544
562
  V.dict_dataset[group][gene].list_og_FI = outgroup
563
+
545
564
  # Add ambiguous group to FI
546
- if opt.ambiguous is True:
565
+ if opt.suspicious is True:
547
566
  V.dict_dataset[group][gene].list_db_FI += ambiguous_group
548
567
  # Add outgroup and db in to dict_hash_FI
549
568
 
@@ -552,11 +571,16 @@ def pipe_append_outgroup(V, path, opt):
552
571
  for group in groups:
553
572
  try:
554
573
  if len(V.dict_dataset[group]) == 0:
555
- logging.warning(
574
+ logging.critical(
556
575
  f"Removing {group} from analysis because outgroup cannot be selected to all genes"
557
576
  )
577
+ critical_flag = 1
558
578
  V.dict_dataset.pop(group, None)
559
579
  except:
560
580
  pass
561
581
 
582
+ # Terminate if terminate option is given, and critical error occurs
583
+ if critical_flag == 1 and opt.terminate is True:
584
+ raise Exception
585
+
562
586
  return V, path, opt
@@ -309,9 +309,14 @@ class CommandParser:
309
309
  type=int,
310
310
  )
311
311
  group_advanced.add_argument(
312
- "--noambiguous",
312
+ "--nosuspicious",
313
313
  action="store_true",
314
- help="Do not include ambiguous samples for sequence-set. Mostly for metabarcoding analysis. It may result wrong result with problematic database.",
314
+ help="Do not include suspicious samples for sequence-set. Mostly for metabarcoding analysis. May deduce inaccurate result with problematic database.",
315
+ )
316
+ group_advanced.add_argument(
317
+ "--terminate",
318
+ action="store_true",
319
+ help="Terminate FunVIP run when critical error detected",
315
320
  )
316
321
 
317
322
  # Cache
@@ -462,6 +462,8 @@ class FunVIP_var:
462
462
  fail_list = []
463
463
  remove_dict = {}
464
464
  tree_hash_dict = hasher.encode(self.list_FI, newick=True)
465
+
466
+ critical_flag = 0
465
467
  for group in self.dict_dataset:
466
468
  remove_dict[group] = {}
467
469
  for gene in self.dict_dataset[group]:
@@ -545,9 +547,38 @@ class FunVIP_var:
545
547
  ## If all value of vectors are zero, it means that all regions have at least one gap
546
548
  ## Raise warning for this
547
549
  if np.all((vector_products == 0)):
548
- logging.warning(
550
+ logging.critical(
549
551
  f"Alignment for {group} {gene} does not have any overlapping regions! Removing from analysis"
550
552
  )
553
+
554
+ critical_flag = 1
555
+
556
+ # Report one non_overlapping pair
557
+ for i in range(len(seq_list) - 1):
558
+ seq1 = seq_list[i]
559
+ seq1_hash = seq1.id
560
+ seq1_str = str(seq.seq)
561
+
562
+ for j in range(i + 1, len(seq_list)):
563
+ seq2 = seq_list[j]
564
+ seq2_hash = seq2.id
565
+ seq2_str = str(seq.seq)
566
+
567
+ has_overlap = False
568
+
569
+ for k in range(len(seq1_str)):
570
+ if seq1_str[k] != "-" and seq2_str[k] != "-":
571
+ has_overlap = True
572
+ break
573
+
574
+ seq1_id = self.dict_hash_FI[seq1_hash]
575
+ seq2_id = self.dict_hash_FI[seq2_hash]
576
+
577
+ logging.critical(
578
+ f"At least one pair of sequence does not overlap, such as {seq1_id} and {seq2_id}"
579
+ )
580
+ critical_flag = 1
581
+
551
582
  fail_list.append((group, gene))
552
583
  # for tree, use hash dict with genus and species information
553
584
  # Decoding process in done in tree building processes, so these alignments cannot be decoded. So decode them here
@@ -575,6 +606,10 @@ class FunVIP_var:
575
606
  # If alignment corresponding to dataset does not exists, raise warning or error
576
607
  pass
577
608
 
609
+ # Terminate if terminate option is given, and critical error occurs
610
+ if critical_flag == 1 and opt.terminate is True:
611
+ raise Exception
612
+
578
613
  # Remove bad datasets
579
614
  for fail in fail_list:
580
615
  group = fail[0]
@@ -266,10 +266,15 @@ def Trimal(fasta, out, path, algorithm="gt", threshold=0.2):
266
266
 
267
267
 
268
268
  # Modeltest
269
- def Modeltest_ng(fasta, out, models, thread):
269
+ def Modeltest_ng(fasta, out, path, models, thread):
270
+ path_modeltestng = f"{path.sys_path}/external/modeltest-ng_Windows/modeltest-ng.exe"
270
271
  if platform == "win32":
272
+ CMD = f"{path_modeltestng} -i '{fasta}' -o '{out}' -t ml -p {thread} --disable-checkpoint {models}"
273
+ """
271
274
  logging.error("Modeltest-NG is not available in windows. Try IQTREE modeltest")
272
275
  raise Exception
276
+ """
277
+
273
278
  else:
274
279
  CMD = f"modeltest-ng -i '{fasta}' -o '{out}' -t ml -p {thread} --disable-checkpoint {models}"
275
280
 
@@ -367,8 +372,10 @@ def FastTree(fasta, out, hash_dict, path, model=""):
367
372
  if model == "skip":
368
373
  model = ""
369
374
  if platform == "win32":
375
+ """
370
376
  if " " in model:
371
- model = f'"{model}"'
377
+ model = f"{model}"
378
+ """
372
379
  if " " in fasta:
373
380
  fasta = f'"{fasta}"'
374
381
  if " " in path.tmp:
@@ -379,6 +379,7 @@ def modeltest(V, path, opt) -> dict:
379
379
  ext.Modeltest_ng(
380
380
  fasta=f"{path.out_alignment}/{opt.runname}_trimmed_{group}_{gene}.fasta",
381
381
  models=models,
382
+ path=path,
382
383
  out=f"{path.out_modeltest}/{opt.runname}_{group}_{gene}",
383
384
  thread=opt.thread,
384
385
  )
@@ -455,7 +456,9 @@ def modeltest(V, path, opt) -> dict:
455
456
  logging.info(
456
457
  "IQTREE will perform ModelFinder internally in tree construction step, skipping in modeltest step"
457
458
  )
458
- model_dict[group][gene] = "skip"
459
+ for group in group_dict:
460
+ for gene in group_dict[group]:
461
+ model_dict[group][gene] = "skip"
459
462
 
460
463
  else: # including opt.model_method.lower() == "none":
461
464
  for group in group_dict: