partis-bcr 1.0.0__py3-none-any.whl → 1.0.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.
Files changed (104) hide show
  1. bin/FastTree +0 -0
  2. bin/add-chimeras.py +59 -0
  3. bin/add-seqs-to-outputs.py +81 -0
  4. bin/bcr-phylo-run.py +799 -0
  5. bin/build.sh +24 -0
  6. bin/cf-alleles.py +97 -0
  7. bin/cf-germlines.py +57 -0
  8. bin/cf-linearham.py +199 -0
  9. bin/chimera-plot.py +76 -0
  10. bin/choose-partially-paired.py +143 -0
  11. bin/circle-plots.py +30 -0
  12. bin/compare-plotdirs.py +298 -0
  13. bin/diff-parameters.py +133 -0
  14. bin/docker-hub-push.sh +6 -0
  15. bin/extract-pairing-info.py +55 -0
  16. bin/gcdyn-simu-run.py +223 -0
  17. bin/gctree-run.py +244 -0
  18. bin/get-naive-probabilities.py +126 -0
  19. bin/iqtree-1.6.12 +0 -0
  20. bin/lonr.r +1020 -0
  21. bin/makeHtml +52 -0
  22. bin/mds-run.py +46 -0
  23. bin/parse-output.py +277 -0
  24. bin/partis +1869 -0
  25. bin/partis-pip +116 -0
  26. bin/partis.py +1869 -0
  27. bin/plot-gl-set-trees.py +519 -0
  28. bin/plot-hmms.py +151 -0
  29. bin/plot-lb-tree.py +427 -0
  30. bin/raxml-ng +0 -0
  31. bin/read-bcr-phylo-trees.py +38 -0
  32. bin/read-gctree-output.py +166 -0
  33. bin/run-chimeras.sh +64 -0
  34. bin/run-dtr-scan.sh +25 -0
  35. bin/run-paired-loci.sh +100 -0
  36. bin/run-tree-metrics.sh +88 -0
  37. bin/smetric-run.py +62 -0
  38. bin/split-loci.py +317 -0
  39. bin/swarm-2.1.13-linux-x86_64 +0 -0
  40. bin/test-germline-inference.py +425 -0
  41. bin/tree-perf-run.py +194 -0
  42. bin/vsearch-2.4.3-linux-x86_64 +0 -0
  43. bin/vsearch-2.4.3-macos-x86_64 +0 -0
  44. bin/xvfb-run +194 -0
  45. partis_bcr-1.0.2.data/scripts/cf-alleles.py +97 -0
  46. partis_bcr-1.0.2.data/scripts/cf-germlines.py +57 -0
  47. partis_bcr-1.0.2.data/scripts/extract-pairing-info.py +55 -0
  48. partis_bcr-1.0.2.data/scripts/gctree-run.py +244 -0
  49. partis_bcr-1.0.2.data/scripts/parse-output.py +277 -0
  50. partis_bcr-1.0.2.data/scripts/split-loci.py +317 -0
  51. partis_bcr-1.0.2.data/scripts/test.py +1005 -0
  52. {partis_bcr-1.0.0.dist-info → partis_bcr-1.0.2.dist-info}/METADATA +1 -1
  53. {partis_bcr-1.0.0.dist-info → partis_bcr-1.0.2.dist-info}/RECORD +101 -51
  54. partis_bcr-1.0.2.dist-info/top_level.txt +1 -0
  55. {partis → python}/glutils.py +1 -1
  56. python/main.py +30 -0
  57. {partis → python}/plotting.py +10 -1
  58. {partis → python}/treeutils.py +18 -16
  59. {partis → python}/utils.py +14 -7
  60. packages/ham/bcrham +0 -0
  61. partis/main.py +0 -59
  62. partis_bcr-1.0.0.dist-info/top_level.txt +0 -1
  63. {partis_bcr-1.0.0.dist-info → partis_bcr-1.0.2.dist-info}/WHEEL +0 -0
  64. {partis_bcr-1.0.0.dist-info → partis_bcr-1.0.2.dist-info}/entry_points.txt +0 -0
  65. {partis_bcr-1.0.0.dist-info → partis_bcr-1.0.2.dist-info}/licenses/COPYING +0 -0
  66. {partis → python}/__init__.py +0 -0
  67. {partis → python}/alleleclusterer.py +0 -0
  68. {partis → python}/allelefinder.py +0 -0
  69. {partis → python}/alleleremover.py +0 -0
  70. {partis → python}/annotationclustering.py +0 -0
  71. {partis → python}/baseutils.py +0 -0
  72. {partis → python}/cache/__init__.py +0 -0
  73. {partis → python}/cache/cached_uncertainties.py +0 -0
  74. {partis → python}/clusterpath.py +0 -0
  75. {partis → python}/coar.py +0 -0
  76. {partis → python}/corrcounter.py +0 -0
  77. {partis → python}/datautils.py +0 -0
  78. {partis → python}/event.py +0 -0
  79. {partis → python}/fraction_uncertainty.py +0 -0
  80. {partis → python}/gex.py +0 -0
  81. {partis → python}/glomerator.py +0 -0
  82. {partis → python}/hist.py +0 -0
  83. {partis → python}/hmmwriter.py +0 -0
  84. {partis → python}/hutils.py +0 -0
  85. {partis → python}/indelutils.py +0 -0
  86. {partis → python}/lbplotting.py +0 -0
  87. {partis → python}/mds.py +0 -0
  88. {partis → python}/mutefreqer.py +0 -0
  89. {partis → python}/paircluster.py +0 -0
  90. {partis → python}/parametercounter.py +0 -0
  91. {partis → python}/paramutils.py +0 -0
  92. {partis → python}/partitiondriver.py +0 -0
  93. {partis → python}/partitionplotter.py +0 -0
  94. {partis → python}/performanceplotter.py +0 -0
  95. {partis → python}/plotconfig.py +0 -0
  96. {partis → python}/processargs.py +0 -0
  97. {partis → python}/prutils.py +0 -0
  98. {partis → python}/recombinator.py +0 -0
  99. {partis → python}/scanplot.py +0 -0
  100. {partis → python}/seqfileopener.py +0 -0
  101. {partis → python}/treegenerator.py +0 -0
  102. {partis → python}/viterbicluster.py +0 -0
  103. {partis → python}/vrc01.py +0 -0
  104. {partis → python}/waterer.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: partis-bcr
3
- Version: 1.0.0
3
+ Version: 1.0.2
4
4
  Summary: B- and T-cell receptor sequence annotation, simulation, clonal family and germline inference
5
5
  Home-page: https://github.com/psathyrella/partis
6
6
  Author: Duncan Ralph
@@ -1,3 +1,47 @@
1
+ bin/FastTree,sha256=ztIqHXzUJRUFLo-BEcE97UyityueIJmFPWXFOoJ0l4k,368264
2
+ bin/add-chimeras.py,sha256=7Zug9D7qtVa2k81kcIGtMKH0BjCmeiq2_rRDjPoiZug,2351
3
+ bin/add-seqs-to-outputs.py,sha256=O7Mkz7GbkJPNtJ4v1fI1d3XfuYLOxG0ZofG37U_Rjsg,5156
4
+ bin/bcr-phylo-run.py,sha256=rzafOBrnLlOQWp3XnBHwYqnsVQVThrVLab1K_zgNi-k,54060
5
+ bin/build.sh,sha256=s5xo8fe7VuvEh8l4myWdS03r84VDLanzIIDfaQc0BuA,637
6
+ bin/cf-alleles.py,sha256=HEQzDvXGSIFoWysUQTF5MZwDWIYwfAeXTepOZj8UN6A,4737
7
+ bin/cf-germlines.py,sha256=AA82Hvy53Qh9czl3gQK6IzZAb8BnqcoUWFbIFuBGyQw,3149
8
+ bin/cf-linearham.py,sha256=mUp7aEUGLCifUv-jk3GL5IbeUiktJ9f8tFi5h7CRkYc,11603
9
+ bin/chimera-plot.py,sha256=EIpQagQUOV4aVDaDqwfZ2kOIEH2K3cQ_NJtDZ9AEmYs,3374
10
+ bin/choose-partially-paired.py,sha256=oPEwxt7adfOOk-V94YxJBOgrwuanp6jdBZpe8Kh-kL0,8100
11
+ bin/circle-plots.py,sha256=Igh5ogyLXPJaq7zgMKtlWkf4ZL3pwQK5ETFlLTQ8Cw8,1056
12
+ bin/compare-plotdirs.py,sha256=Tt8DDOBgMsdn4Ncg6K6fn0G1-vNS5VOmikisNzwLauE,16384
13
+ bin/diff-parameters.py,sha256=UTMqLnNG7s0XI7WXCqHbFGGIizLvS5bbqNhWwFlznZU,4746
14
+ bin/docker-hub-push.sh,sha256=SYryZaUz7t2cFFOv8femIVEZew9DnkJBwyrkDInJKqk,176
15
+ bin/extract-pairing-info.py,sha256=hUpXGZHLrqHfEYvSuyK3lKjOxmYeNyCf2bvqHETmUkA,2955
16
+ bin/gcdyn-simu-run.py,sha256=r5rQwByWfTJ-FDmLyk_9HtWYd2qTuXsBcjKEXsk9_Lo,11315
17
+ bin/gctree-run.py,sha256=uh0kuZjwyY_TutgCMAgFl2l8yJ0TOuVGf2EEPFHTg3E,13964
18
+ bin/get-naive-probabilities.py,sha256=WfEZf3YN2_VU32ntsNhMJHeukLBIz36_cUnPgOw8bzo,6930
19
+ bin/iqtree-1.6.12,sha256=k9MzGI8mVDMih0s986kAP3FcyVIdRMuB0QliUyHoRFg,7843672
20
+ bin/lonr.r,sha256=YzAsjyQ-NZ2shOPhzkFFppsgXJEhMTztFA-C6NVyEJ4,44212
21
+ bin/makeHtml,sha256=SMMulEmYoU4ve4jlCRNaDuw9f4FS4t8g_FGE7z5Ndb4,1190
22
+ bin/mds-run.py,sha256=rShy5b3oqvFZqhNdVxrtyZ4nw7whK-SKPAYl2thXooU,2003
23
+ bin/parse-output.py,sha256=_vlx4ptHEoKiztm2RrCMqQZYlFriFmv4Sv17E6M6J9o,19533
24
+ bin/partis,sha256=l_rAMqINhxVTAfopFjVWF6BeiYFtCpWEAFoZvtPGE2U,225082
25
+ bin/partis-pip,sha256=STJkb_lm94kKxthpmIsMgFIhBWsoOJAtRJZbiFewaAU,5562
26
+ bin/partis.py,sha256=l_rAMqINhxVTAfopFjVWF6BeiYFtCpWEAFoZvtPGE2U,225082
27
+ bin/plot-gl-set-trees.py,sha256=bgWPBmzzlD_YgWl9nQetGdzmgosXDKyVyfvaHs0VvVc,25695
28
+ bin/plot-hmms.py,sha256=rKhPyWxexMKBt8kmwuM5ebFfFONtREoDlRqs4J52rT8,6560
29
+ bin/plot-lb-tree.py,sha256=EKvA2DhRL8oAJoUy5FYdQaLyZYL4Ez6_4OpwD3kVbVM,23674
30
+ bin/raxml-ng,sha256=ypUDi65TiA9zBfLvIvQwmGRwL-OzQhO7DU_vLAWHlGs,4523960
31
+ bin/read-bcr-phylo-trees.py,sha256=MtbKi_clOELYTt3kgjo60SZ0M9IMVML4MaijKp0VC6o,1825
32
+ bin/read-gctree-output.py,sha256=UJsj_tqGcMNbzRntoB25gztqu2rpnVVrHM5MJjVqz1c,11085
33
+ bin/run-chimeras.sh,sha256=pLaxmqVMEvDaYoLjc9_eEYTjXxv9XYviD7HA3Xxz4zE,4863
34
+ bin/run-dtr-scan.sh,sha256=UEC3qQGov6_Uw6KjTaOxyAlaz2zkjysr8WHmkbwwJRc,992
35
+ bin/run-paired-loci.sh,sha256=CU84347edBTEsDFeivEVkQMUOdqDj2oQ8Hgw9D_6bkk,12368
36
+ bin/run-tree-metrics.sh,sha256=dblamefc1b-aH-vLR5BaNAagfXHrw9FZV3xY4ku1if4,17005
37
+ bin/smetric-run.py,sha256=5fOD_Y9aNzJa80doDGOH_emSYNmVrrj8nW4XWaMBri8,3820
38
+ bin/split-loci.py,sha256=-2BbF_GoWjU8txW3EEFmRwB0A_qaIdTTjr4_JGQzGwU,20718
39
+ bin/swarm-2.1.13-linux-x86_64,sha256=WYJuWV4Jk8Y1ZKFkksTXGzZ_Czw4zee_wCcNB2sqcNY,454873
40
+ bin/test-germline-inference.py,sha256=MGws6CCWlFkyfdNn0TDh8wypw3_Q_C2t7W-V6bkOJUc,24041
41
+ bin/tree-perf-run.py,sha256=omJwhvbKnK0iXx0T5BsIySuCkmy9o5X4UDQJ-7L457Y,12716
42
+ bin/vsearch-2.4.3-linux-x86_64,sha256=8y0JkQXCvWouUHrbXd_tD9v-WA8ZYBc29frI_F9f6zc,1766528
43
+ bin/vsearch-2.4.3-macos-x86_64,sha256=OpueITQ_9AP2BKIESX0hNJIpev8iaEAgzdajGhi-QrA,401244
44
+ bin/xvfb-run,sha256=vc1d8rkniPIm-56LZMDTOOtlv_IM68EgBOrEOdiys08,6103
1
45
  data/gizmod.txt,sha256=NAQzCOBD7e9We-qYoy6sJSgxgXQbOow0iVu3hYQxCI4,944
2
46
  data/notes.txt,sha256=eHRPhGZ2qOsGYybHk570wjrJ5ZHYfbnqHsFc8GDY-dM,1422
3
47
  data/sample-seqs.yaml,sha256=uHRtSwKrhaQj_8r91OLFtFhOEw5hf54ROH51mvBC3R0,138
@@ -252,55 +296,61 @@ data/substitution-profiles/GSSPs_for_VH_genes_with_at_least_300_lineages.txt,sha
252
296
  data/substitution-profiles/GSSPs_for_VK_genes_with_at_least_300_lineages.txt,sha256=dyMU1R_Izk_ciOVTNWmGL5SQBIKDCCKpxXM6eTGO4Fg,184138
253
297
  data/substitution-profiles/GSSPs_for_VL_genes_with_at_least_300_lineages.txt,sha256=CMFb1gk8MbfaMb6y0_qLLiKErrx866C2EafKRSPesB4,184979
254
298
  data/substitution-profiles/notes.txt,sha256=-DK9E31YovqOWaXR1Q-LL5KFhjVJcSLwXbriajUq1TA,389
255
- packages/ham/bcrham,sha256=DwQaLOc_OwKYj9mk3TGVVEqzBGMIl_0lje3SbMrgEYY,874648
256
299
  packages/ig-sw/src/ig_align/ig-sw,sha256=SNFYfMlvX9s9T64t9fYIB5ugD6cZ016SZVbRhrz5Pro,293464
257
- partis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
258
- partis/alleleclusterer.py,sha256=x50E_lJMlKPc-CPkdkM1qe4AvVi-mkDJ1cBDxs5L-ms,30551
259
- partis/allelefinder.py,sha256=SgJjopk5ivLOcmTumsWq5PZ05aPZ6zQyjTd1fxeRjaM,80402
260
- partis/alleleremover.py,sha256=N3WYuk2j_My17Q0T7jM0b8_q6liv5b-N1nCkAuPyq2k,12030
261
- partis/annotationclustering.py,sha256=rBcjdz9eHFUjoz1G5D46cLSxKTExyqtOkiUa0TzBXOU,13027
262
- partis/baseutils.py,sha256=jIS-D2TTAwyFxrpeGjcetlHi_be2tdMJhK5uSxZUMqQ,573
263
- partis/clusterpath.py,sha256=oS79lMq_uedUEsiewutgLzkz9MkSRVPHBK0Ovz9cTp0,51694
264
- partis/coar.py,sha256=5frBiNkWGdlOg-nZPTeA73Vq4hL3oSg60VkSWe7maS4,14098
265
- partis/corrcounter.py,sha256=Rz7G2wBkcSFvAogWiwsnyEqSAROMIOod6i6QbEINX6k,6008
266
- partis/datautils.py,sha256=wTrr_a6K4WIRXpIjeoIEAMmVV6_9QMSDf5V15583Jh4,3213
267
- partis/event.py,sha256=LryRUz1uqQha7zhkQ5iVBxWh7GCHY0ojteNvoFWLBZo,11999
268
- partis/fraction_uncertainty.py,sha256=86fIYTRmm0yU22Azt-VrHI4eRqSOli-qkJOPa6ZtcrA,3078
269
- partis/gex.py,sha256=DWK4WHIsuBzHO6PhtwX3Q76oINr4Jm5hkMBJSUBfqZ8,25771
270
- partis/glomerator.py,sha256=Big90RVTOsyAqRE-2nlJmNQaglHmQRw6egdD_GImTos,17412
271
- partis/glutils.py,sha256=ZT1gGD8b0MtXImUsq4LKuA0MvcrnQ_Z_7SdOztpBGy4,100310
272
- partis/hist.py,sha256=oNZNIbisTzZERHqUZlzfMBYsjEWJBLE_oszEexLGd4M,32583
273
- partis/hmmwriter.py,sha256=lWC4oW7dvAFj0mmCYCmzV67kuM-zZPSzPXqu0d6o_Ro,55480
274
- partis/hutils.py,sha256=o3z4LbFbemxiQdBoTJv8YPbnwul0SkdfBl9UXJXOHIE,15684
275
- partis/indelutils.py,sha256=SlPFQnzPN27VHxvcUXHIgHZtBm6MGfookz6jHDavtm4,45001
276
- partis/lbplotting.py,sha256=AKQsFJKi_gw7us7ARNwUhVNfHvWbxp1oo4JbJtWORaQ,126486
277
- partis/main.py,sha256=HP_gvoYI84wfJWN6e5N0JC0Oua7eBRbxtaBvmHayOT8,2044
278
- partis/mds.py,sha256=58JdN3X11t8yMLeuhpYEqpC6doZQc9m4yLFj4Bm1hHc,15859
279
- partis/mutefreqer.py,sha256=1xkbi0rnkKbPN-09VB0OXC4MLAMAzwVYsOlQ77NVB9Q,14097
280
- partis/paircluster.py,sha256=jnIXPtGe2-Z_PP-bYztMh0BuKnoh7P55ixsEkls0xUg,154337
281
- partis/parametercounter.py,sha256=BH9iyTT7LfF5aCmrdNgAHlz4BWeR5uNYXaZT4L8jUKI,13768
282
- partis/paramutils.py,sha256=DEFRNQp_eLGJ6ab2N6fzmTpB3VbZjI5eVr4DKddOjV4,10796
283
- partis/partitiondriver.py,sha256=YDZZqDCZDgUbiqyjANSJ0cnFPo8Bus0mT8mc0qMwCas,205788
284
- partis/partitionplotter.py,sha256=CEfPtCCpMGbW7l6j3uOoAqmngQ5GrLWDcFTc4gLnI6o,87906
285
- partis/performanceplotter.py,sha256=bWGwodNhbZpgSlZVyfmxhpwhCGRKcJHpdl3sPiEbcnQ,20393
286
- partis/plotconfig.py,sha256=D-QwV4xm57Gby9Cv49wDaGX2SPCxGC24c8VuNoARh7w,7945
287
- partis/plotting.py,sha256=uu7WaTMLHlQXCI9umI6DhwN8FbDmEH1_-ymeFw4IgTo,113750
288
- partis/processargs.py,sha256=Qc9okkbnLRv1GVBeMtZIzDkGcdHvryDsXiT0t9DwFss,49376
289
- partis/prutils.py,sha256=oqzL_F4zY-vxGLW-x7dEQA-YQU9QmS-UxB2kxPEUnac,22297
290
- partis/recombinator.py,sha256=NQnonjGjXWmkkbtbcc7NuImQhJX8TnXBN39jWRRwooY,71681
291
- partis/scanplot.py,sha256=-ZXle3lW5C2ZRECC6r0xJokscZT0-A_VV7om6We_HbY,64864
292
- partis/seqfileopener.py,sha256=6WZQaG-0R3KNk3ZYLP2bAJ9ViR7b9viSB-vTePaaMh0,26880
293
- partis/treegenerator.py,sha256=aExfulBvj2CeNDcnX6AG-jeDiEmOvEzfSsDtt9psMVk,18909
294
- partis/treeutils.py,sha256=6nj_uX0mAm3vbKfMshy7ryiwun114uOVtJR8MgU469U,281997
295
- partis/utils.py,sha256=PnaoA4d6T66VgmPO30I0QOgP9JP6dXE3kkE8Jd2OGDI,492551
296
- partis/viterbicluster.py,sha256=ub8vHxJbTDUtx2QUS2rGFFRQVKyGMdaGbDtFtNcaTgc,2070
297
- partis/vrc01.py,sha256=f3PpRV9ZOU9kxJCKdoJlP9wvKB7FEgMM8WoNpevsEOE,10813
298
- partis/waterer.py,sha256=sPBsJchmK2EO3M5UCwZq_S5mRV3eYFuIZoite4Js62g,109955
299
- partis/cache/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
300
- partis/cache/cached_uncertainties.py,sha256=GNs18AG8ROdDg0OOrcArsU73Ev1U8k5Gsnf79WndHG8,4257821
301
- partis_bcr-1.0.0.dist-info/licenses/COPYING,sha256=jOtLnuWt7d5Hsx6XXB2QxzrSe2sWWh3NgMfFRetluQM,35147
302
- partis_bcr-1.0.0.dist-info/METADATA,sha256=gfUKza-zC9ZM382fHjkGGbsfDrQrZGpJWMO7WyZdE1Q,4976
303
- partis_bcr-1.0.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
304
- partis_bcr-1.0.0.dist-info/entry_points.txt,sha256=Q-AkAQ91YwiKNHruS32ACdY4_IQdpZhpij2EuVDmdnM,44
305
- partis_bcr-1.0.0.dist-info/top_level.txt,sha256=t0qq1SNxSo-wABNsRqtRJP4bzaZaYc8-wMOWsMUWnAY,7
306
- partis_bcr-1.0.0.dist-info/RECORD,,
300
+ partis_bcr-1.0.2.data/scripts/cf-alleles.py,sha256=AgFLoRfcwuX1InVpE3zG6-unqoCBGOeCTpEl_RZftvU,4723
301
+ partis_bcr-1.0.2.data/scripts/cf-germlines.py,sha256=8_bq0ue3ALFQ-a7-ntnhkbCaBdQ5mlWtQgNeQP_TvcQ,3135
302
+ partis_bcr-1.0.2.data/scripts/extract-pairing-info.py,sha256=IGPd4jYpsW3IPgsrxTJrk9jAwUKlb45eX3lOpb8Maos,2941
303
+ partis_bcr-1.0.2.data/scripts/gctree-run.py,sha256=BfSZCFgqdhUEqVsv2h20o6OkS6KbQgx5tfvBhySRx2U,13950
304
+ partis_bcr-1.0.2.data/scripts/parse-output.py,sha256=8nrg0ip3XDhme02NCiI45BrSqCNvbRIbKYErD8STk8U,19519
305
+ partis_bcr-1.0.2.data/scripts/split-loci.py,sha256=K0WXQYtloL5rs46mwvEXUecqT3iG8bbqwNOTNwfpvzY,20704
306
+ partis_bcr-1.0.2.data/scripts/test.py,sha256=aI-2mLH5WXYVWoS4zateeSgDynDUC_DK9QF-UAEpWms,63609
307
+ partis_bcr-1.0.2.dist-info/licenses/COPYING,sha256=jOtLnuWt7d5Hsx6XXB2QxzrSe2sWWh3NgMfFRetluQM,35147
308
+ python/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
309
+ python/alleleclusterer.py,sha256=x50E_lJMlKPc-CPkdkM1qe4AvVi-mkDJ1cBDxs5L-ms,30551
310
+ python/allelefinder.py,sha256=SgJjopk5ivLOcmTumsWq5PZ05aPZ6zQyjTd1fxeRjaM,80402
311
+ python/alleleremover.py,sha256=N3WYuk2j_My17Q0T7jM0b8_q6liv5b-N1nCkAuPyq2k,12030
312
+ python/annotationclustering.py,sha256=rBcjdz9eHFUjoz1G5D46cLSxKTExyqtOkiUa0TzBXOU,13027
313
+ python/baseutils.py,sha256=jIS-D2TTAwyFxrpeGjcetlHi_be2tdMJhK5uSxZUMqQ,573
314
+ python/clusterpath.py,sha256=oS79lMq_uedUEsiewutgLzkz9MkSRVPHBK0Ovz9cTp0,51694
315
+ python/coar.py,sha256=5frBiNkWGdlOg-nZPTeA73Vq4hL3oSg60VkSWe7maS4,14098
316
+ python/corrcounter.py,sha256=Rz7G2wBkcSFvAogWiwsnyEqSAROMIOod6i6QbEINX6k,6008
317
+ python/datautils.py,sha256=wTrr_a6K4WIRXpIjeoIEAMmVV6_9QMSDf5V15583Jh4,3213
318
+ python/event.py,sha256=LryRUz1uqQha7zhkQ5iVBxWh7GCHY0ojteNvoFWLBZo,11999
319
+ python/fraction_uncertainty.py,sha256=86fIYTRmm0yU22Azt-VrHI4eRqSOli-qkJOPa6ZtcrA,3078
320
+ python/gex.py,sha256=DWK4WHIsuBzHO6PhtwX3Q76oINr4Jm5hkMBJSUBfqZ8,25771
321
+ python/glomerator.py,sha256=Big90RVTOsyAqRE-2nlJmNQaglHmQRw6egdD_GImTos,17412
322
+ python/glutils.py,sha256=JJ4XZIC-eJXSYD-__ygii6wWsIScGvRqmqtUiTosBto,100266
323
+ python/hist.py,sha256=oNZNIbisTzZERHqUZlzfMBYsjEWJBLE_oszEexLGd4M,32583
324
+ python/hmmwriter.py,sha256=lWC4oW7dvAFj0mmCYCmzV67kuM-zZPSzPXqu0d6o_Ro,55480
325
+ python/hutils.py,sha256=o3z4LbFbemxiQdBoTJv8YPbnwul0SkdfBl9UXJXOHIE,15684
326
+ python/indelutils.py,sha256=SlPFQnzPN27VHxvcUXHIgHZtBm6MGfookz6jHDavtm4,45001
327
+ python/lbplotting.py,sha256=AKQsFJKi_gw7us7ARNwUhVNfHvWbxp1oo4JbJtWORaQ,126486
328
+ python/main.py,sha256=HiNELhSRbXoA3qcePoU-BLoAh_aQ8BGLYdtbzvDbzmg,891
329
+ python/mds.py,sha256=58JdN3X11t8yMLeuhpYEqpC6doZQc9m4yLFj4Bm1hHc,15859
330
+ python/mutefreqer.py,sha256=1xkbi0rnkKbPN-09VB0OXC4MLAMAzwVYsOlQ77NVB9Q,14097
331
+ python/paircluster.py,sha256=jnIXPtGe2-Z_PP-bYztMh0BuKnoh7P55ixsEkls0xUg,154337
332
+ python/parametercounter.py,sha256=BH9iyTT7LfF5aCmrdNgAHlz4BWeR5uNYXaZT4L8jUKI,13768
333
+ python/paramutils.py,sha256=DEFRNQp_eLGJ6ab2N6fzmTpB3VbZjI5eVr4DKddOjV4,10796
334
+ python/partitiondriver.py,sha256=YDZZqDCZDgUbiqyjANSJ0cnFPo8Bus0mT8mc0qMwCas,205788
335
+ python/partitionplotter.py,sha256=CEfPtCCpMGbW7l6j3uOoAqmngQ5GrLWDcFTc4gLnI6o,87906
336
+ python/performanceplotter.py,sha256=bWGwodNhbZpgSlZVyfmxhpwhCGRKcJHpdl3sPiEbcnQ,20393
337
+ python/plotconfig.py,sha256=D-QwV4xm57Gby9Cv49wDaGX2SPCxGC24c8VuNoARh7w,7945
338
+ python/plotting.py,sha256=I9mWkyCWEMOvxFqDiO3J1qqh_1awJ8VK9rCYtLDy8Jw,114243
339
+ python/processargs.py,sha256=Qc9okkbnLRv1GVBeMtZIzDkGcdHvryDsXiT0t9DwFss,49376
340
+ python/prutils.py,sha256=oqzL_F4zY-vxGLW-x7dEQA-YQU9QmS-UxB2kxPEUnac,22297
341
+ python/recombinator.py,sha256=NQnonjGjXWmkkbtbcc7NuImQhJX8TnXBN39jWRRwooY,71681
342
+ python/scanplot.py,sha256=-ZXle3lW5C2ZRECC6r0xJokscZT0-A_VV7om6We_HbY,64864
343
+ python/seqfileopener.py,sha256=6WZQaG-0R3KNk3ZYLP2bAJ9ViR7b9viSB-vTePaaMh0,26880
344
+ python/treegenerator.py,sha256=aExfulBvj2CeNDcnX6AG-jeDiEmOvEzfSsDtt9psMVk,18909
345
+ python/treeutils.py,sha256=aSKSxKZK2attLKrJv3xrDVWekgwtQVhqrnqZKs9c-uM,282309
346
+ python/utils.py,sha256=RZr79jh3jLkYPBZW4N6210CkC-rKlrlxx2uu-ER5jdA,492652
347
+ python/viterbicluster.py,sha256=ub8vHxJbTDUtx2QUS2rGFFRQVKyGMdaGbDtFtNcaTgc,2070
348
+ python/vrc01.py,sha256=f3PpRV9ZOU9kxJCKdoJlP9wvKB7FEgMM8WoNpevsEOE,10813
349
+ python/waterer.py,sha256=sPBsJchmK2EO3M5UCwZq_S5mRV3eYFuIZoite4Js62g,109955
350
+ python/cache/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
351
+ python/cache/cached_uncertainties.py,sha256=GNs18AG8ROdDg0OOrcArsU73Ev1U8k5Gsnf79WndHG8,4257821
352
+ partis_bcr-1.0.2.dist-info/METADATA,sha256=OMZO1vX1KCG3OQvWJvnVbsMl_OBJ8aoG4QwTk1CFvxI,4976
353
+ partis_bcr-1.0.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
354
+ partis_bcr-1.0.2.dist-info/entry_points.txt,sha256=Q-AkAQ91YwiKNHruS32ACdY4_IQdpZhpij2EuVDmdnM,44
355
+ partis_bcr-1.0.2.dist-info/top_level.txt,sha256=J-z0poNcsv31IHB413--iOY8LoHBKiTHeybHX3abokI,7
356
+ partis_bcr-1.0.2.dist-info/RECORD,,
@@ -0,0 +1 @@
1
+ python
@@ -46,7 +46,7 @@ def functionality_fname(species=None, gldir=None): # _not_ generally present (b
46
46
  species = 'human'
47
47
  print(' %s using default species %s for functionality file' % (utils.color('yellow', 'warning'), species))
48
48
  if gldir is None:
49
- gldir = os.path.dirname(os.path.realpath(__file__)).replace('/python', '')
49
+ gldir = utils.get_partis_dir()
50
50
  return '%s/data/germlines/%s/functionalities.csv' % (gldir, species)
51
51
 
52
52
  csv_headers = ['gene', 'cyst_position', 'tryp_position', 'phen_position', 'aligned_seq']
python/main.py ADDED
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Main entry point for partis package
4
+ """
5
+
6
+ import os
7
+ import sys
8
+
9
+ def main():
10
+ """Main entry point for partis command line interface."""
11
+ # Set up the partis environment
12
+ current_dir = os.path.dirname(os.path.realpath(__file__))
13
+ site_packages_dir = os.path.dirname(current_dir) # site-packages/
14
+
15
+ # Let the original bin/partis script auto-detect its location
16
+ # Don't override PARTIS_DIR - let it be set naturally
17
+
18
+ # Execute the original bin/partis script
19
+ bin_partis = os.path.join(site_packages_dir, 'bin', 'partis')
20
+
21
+ if os.path.exists(bin_partis):
22
+ import subprocess
23
+ result = subprocess.run([sys.executable, bin_partis] + sys.argv[1:])
24
+ sys.exit(result.returncode)
25
+ else:
26
+ print(f'Error: partis script not found at {bin_partis}')
27
+ sys.exit(1)
28
+
29
+ if __name__ == '__main__':
30
+ main()
@@ -749,7 +749,10 @@ legends = {'vollmers-0.9' : 'VJ CDR3 0.9',
749
749
  'subset-partition' : 'subset partis',
750
750
  'vsearch-subset-partition' : 'vsearch subset partis',
751
751
  'star-partition' : 'star partis',
752
- 'phylo-naive-iqtree' : 'IQ-TREE (masked)',
752
+ 'phylo-naive-iqtree' : 'IQ-TREE (CDR3 N)',
753
+ 'phylo-naive-iqtree-fuzz-0' : 'IQ-TREE (fuzz 0)',
754
+ 'phylo-naive-iqtree-fuzz-1' : 'IQ-TREE (fuzz 1)',
755
+ 'phylo-naive-iqtree-fuzz-2' : 'IQ-TREE (fuzz 2)',
753
756
  'single-chain-partis' : 'single chain partis',
754
757
  'annotate' : '1-seq. partis',
755
758
  'seed-partition' : 'full partis (seed)',
@@ -867,6 +870,9 @@ colors = {'true' : '#006600',
867
870
  'vsearch-subset-partition' : '#ff7f0e', #c04000',
868
871
  'star-partition' : '#ff7f0e',
869
872
  'phylo-naive-iqtree' : 'grey',
873
+ 'phylo-naive-iqtree-fuzz-0' : 'grey',
874
+ 'phylo-naive-iqtree-fuzz-1' : 'grey',
875
+ 'phylo-naive-iqtree-fuzz-2' : 'grey',
870
876
  'single-chain-partis' : '#006600',
871
877
  'single-chain-scoper' : '#006600',
872
878
  'annotate' : '#1f77b4',
@@ -935,6 +941,9 @@ linestyles = {'naive-hamming-partition' : 'dashed',
935
941
  'changeo' : 'dashed',
936
942
  'scoper' : 'dashed',
937
943
  'mobille' : 'dashed',
944
+ 'phylo-naive-iqtree-fuzz-0' : 'dotted',
945
+ 'phylo-naive-iqtree-fuzz-1' : 'dashdot',
946
+ 'phylo-naive-iqtree-fuzz-2' : 'dashed',
938
947
  'igblast' : 'dotted',
939
948
  'mixcr' : 'dotted',
940
949
  'misassign-distance-0.03' : 'dashed',
@@ -1043,7 +1043,7 @@ def collapse_zero_length_leaves(dtree, sequence_uids, dont_warn=False, debug=Fal
1043
1043
  def run_tree_inference(method, input_seqfos=None, annotation=None, naive_seq=None, naive_seq_name='XnaiveX', no_naive=False, actions='prep:run:read',
1044
1044
  taxon_namespace=None, suppress_internal_node_taxa=False, persistent_workdir=None, redo=False, outfix='out', cmdfo=None,
1045
1045
  glfo=None, parameter_dir=None, use_docker=False, linearham_dir=None, iclust=None, seed_id=None, only_pass_leaves=False,
1046
- collapse_duplicate_seqs=False, keys_not_to_collapse=None, dont_collapse_zero_len_leaves=False, phylo_naive_inference=False, debug=False):
1046
+ collapse_duplicate_seqs=False, keys_not_to_collapse=None, dont_collapse_zero_len_leaves=False, phylo_naive_inference_fuzz=None, debug=False):
1047
1047
  # ----------------------------------------------------------------------------------------
1048
1048
  def lhindir(workdir):
1049
1049
  return '%s/input' % workdir
@@ -1053,13 +1053,14 @@ def run_tree_inference(method, input_seqfos=None, annotation=None, naive_seq=Non
1053
1053
  cmd = '%s/bin/FastTree -gtr -nt -out %s %s' % (utils.get_partis_dir(), ofn(workdir), ifn(workdir))
1054
1054
  elif method in iqt_methods:
1055
1055
  vsn = '1.6.12' if method=='iqtree' else method.split('-')[1]
1056
- cmd = '%s/packages/iqtree-%s-Linux/bin/iqtree%s -asr -s %s -pre %s/%s -o %s' % (utils.get_partis_dir(), vsn, '2' if vsn[0]=='2' else '', ifn(workdir), os.path.dirname(ifn(workdir)), outfix, naive_seq_name)
1056
+ cmd = '%s/bin/iqtree-%s -asr -s %s -pre %s/%s -o %s' % (utils.get_partis_dir(), vsn, ifn(workdir), os.path.dirname(ifn(workdir)), outfix, naive_seq_name)
1057
+ # cmd = '%s/packages/iqtree-%s-Linux/bin/iqtree%s -asr -s %s -pre %s/%s -o %s' % (utils.get_partis_dir(), vsn, '2' if vsn[0]=='2' else '', ifn(workdir), os.path.dirname(ifn(workdir)), outfix, naive_seq_name)
1057
1058
  if redo:
1058
1059
  cmd += ' -redo'
1059
1060
  elif method == 'raxml':
1060
1061
  rcmds = ['#!/bin/bash']
1061
- rcmds += ['%s/packages/raxml/raxml-ng --model GTR+G --msa %s --msa-format FASTA' % (utils.get_partis_dir(), ifn(workdir))]
1062
- rcmds += ['%s/packages/raxml/raxml-ng --model GTR+G --msa %s --msa-format FASTA --ancestral --tree %s' % (utils.get_partis_dir(), ifn(workdir), ofn(workdir))]
1062
+ rcmds += ['%s/bin/raxml-ng --model GTR+G --msa %s --msa-format FASTA' % (utils.get_partis_dir(), ifn(workdir))]
1063
+ rcmds += ['%s/bin/raxml-ng --model GTR+G --msa %s --msa-format FASTA --ancestral --tree %s' % (utils.get_partis_dir(), ifn(workdir), ofn(workdir))]
1063
1064
  utils.write_cmd_file('\n'.join(rcmds) + '\n', '%s/run.sh'%workdir)
1064
1065
  cmd = '%s/run.sh'%workdir
1065
1066
  elif 'gctree' in method:
@@ -1256,17 +1257,18 @@ def run_tree_inference(method, input_seqfos=None, annotation=None, naive_seq=Non
1256
1257
  assert actions in ['prep:run:read', 'prep', 'read'] # other combinations could make sense, but don't need them atm
1257
1258
  if method == 'linearham' and glfo is None:
1258
1259
  raise Exception('need to pass in glfo in order to run linearham (e.g. linearham can\'t work on the fake h/l annotations')
1259
- if phylo_naive_inference:
1260
+ if phylo_naive_inference_fuzz is not None:
1260
1261
  assert method in iqt_methods # needs implementing for other methods
1261
1262
 
1262
1263
  is_fake_paired = annotation is not None and annotation.get('is_fake_paired', False)
1263
1264
  if input_seqfos is None:
1264
1265
  assert naive_seq is None # can't specify it two ways
1265
1266
  input_seqfos = utils.seqfos_from_line(annotation, prepend_naive=True, naive_name=naive_seq_name, extra_keys=keys_not_to_collapse, add_sfos_for_multiplicity='gctree' in method)
1266
- if phylo_naive_inference:
1267
+ if phylo_naive_inference_fuzz is not None:
1267
1268
  assert input_seqfos[0]['name'] == naive_seq_name
1268
- # utils.add_implicit_info(glfo, annotation)
1269
- input_seqfos[0]['seq'] = utils.get_cdr3_masked_naive(annotation, n_fuzz=phylo_naive_inference)
1269
+ masked_seq = utils.get_cdr3_masked_naive(annotation, n_fuzz=phylo_naive_inference_fuzz)
1270
+ input_seqfos[0]['seq'] = masked_seq # replace naive seq with masked seq
1271
+ input_seqfos.insert(0, {'name' : 'masked-%s-1'%naive_seq_name, 'seq' : masked_seq}) # add masked seq as new seqfo
1270
1272
  elif naive_seq is not None:
1271
1273
  input_seqfos = [{'name' : naive_seq_name, 'seq' : naive_seq}] + input_seqfos
1272
1274
  elif not no_naive: # force calling fcn to affirmatively indicate it doesn't want the naive sequence in the tree (since at one point we forget to add it, with bad consequences)
@@ -1335,7 +1337,7 @@ def run_tree_inference(method, input_seqfos=None, annotation=None, naive_seq=Non
1335
1337
 
1336
1338
  removed_nodes = None
1337
1339
  # fasttree, iqtree, and gctree put all observed seqs as leaves, so we sometimes want to collapse [near-]zero-length leaves onto their internal node parent
1338
- if not dont_collapse_zero_len_leaves and not only_pass_leaves and not suppress_internal_node_taxa and not phylo_naive_inference: # only_pass_leaves means we're probably caring about tree inference accuracy, so want all initial leaves to end up as final leaves to ease comparisons, while suppress_internal_node_taxa has to do with clusterpath tree method
1340
+ if not dont_collapse_zero_len_leaves and not only_pass_leaves and not suppress_internal_node_taxa and phylo_naive_inference_fuzz is None: # only_pass_leaves means we're probably caring about tree inference accuracy, so want all initial leaves to end up as final leaves to ease comparisons, while suppress_internal_node_taxa has to do with clusterpath tree method
1339
1341
  if debug:
1340
1342
  print(' collapsing zero length leaves')
1341
1343
  removed_nodes = collapse_zero_length_leaves(dtree, uid_list + [naive_seq_name], dont_warn=collapse_duplicate_seqs, debug=debug)
@@ -1346,7 +1348,7 @@ def run_tree_inference(method, input_seqfos=None, annotation=None, naive_seq=Non
1346
1348
  re_insert_ambig(input_seqfos, padded_seq_info_list)
1347
1349
  if len(inf_seqfos) > 0:
1348
1350
  check_lengths(input_seqfos, inf_seqfos)
1349
- if phylo_naive_inference:
1351
+ if phylo_naive_inference_fuzz is not None:
1350
1352
  assert inf_antn is None # just needs to be implemented for the methods that return inf_antn rather than inf_seqfos
1351
1353
  root_dists = [(s, dtree.find_node_with_taxon_label(s['name']).distance_from_root()) for s in inf_seqfos] # (seqfo, distance) pairs
1352
1354
  nearfo, neardist = sorted(root_dists, key=operator.itemgetter(1))[0]
@@ -2337,7 +2339,7 @@ def parse_lonr(outdir, input_seqfos, naive_seq_name, reco_info=None, debug=False
2337
2339
  # ----------------------------------------------------------------------------------------
2338
2340
  def run_lonr(input_seqfos, naive_seq_name, workdir, tree_method, lonr_code_file=None, phylip_treefile=None, phylip_seqfile=None, seed=1, debug=False):
2339
2341
  if lonr_code_file is None:
2340
- lonr_code_file = os.path.dirname(os.path.realpath(__file__)).replace('/python', '/bin/lonr.r')
2342
+ lonr_code_file = '%s/bin/lonr.r' % utils.get_partis_dir()
2341
2343
  if not os.path.exists(lonr_code_file):
2342
2344
  raise Exception('lonr code file %s d.n.e.' % lonr_code_file)
2343
2345
  if tree_method not in ('dnapars', 'neighbor'):
@@ -2624,7 +2626,7 @@ def get_treefos(args, antn_list, glfo=None, debug=False): # note that <antn_lis
2624
2626
  # NOTE <inf_lines_to_use> should be *all* your annotations (so the subclust workdirs are correct), *not* just one cluster at a time
2625
2627
  def get_trees_for_annotations(inf_lines_to_use, treefname=None, cpath=None, workdir=None, cluster_indices=None, tree_inference_method=None, inf_outdir=None,
2626
2628
  glfo=None, parameter_dir=None, linearham_dir=None, min_cluster_size=4, seed_id=None, only_pass_leaves=False, collapse_duplicate_seqs=False,
2627
- keys_not_to_collapse=None, phylo_naive_inference=False, debug=False):
2629
+ keys_not_to_collapse=None, phylo_naive_inference_fuzz=None, debug=False):
2628
2630
  # ----------------------------------------------------------------------------------------
2629
2631
  def addtree(iclust, dtree, origin):
2630
2632
  treefos[iclust] = {'tree' : dtree, 'origin' : origin}
@@ -2697,7 +2699,7 @@ def get_trees_for_annotations(inf_lines_to_use, treefname=None, cpath=None, work
2697
2699
  # NOTE if you add an arg here, you probably also need to add it to the 'read' call of the same fcn below
2698
2700
  cmdfos[iclust] = run_tree_inference(tree_inference_method, annotation=line, actions='prep', persistent_workdir=perswdir(iclust), glfo=glfo, iclust=iclust, parameter_dir=parameter_dir,
2699
2701
  linearham_dir=linearham_dir, seed_id=seed_id, only_pass_leaves=only_pass_leaves, collapse_duplicate_seqs=collapse_duplicate_seqs,
2700
- keys_not_to_collapse=keys_not_to_collapse, phylo_naive_inference=phylo_naive_inference, debug=debug) # this'll still return the cmdfo if the output exists (since we need it for parsing below), but we won't actually rerun it
2702
+ keys_not_to_collapse=keys_not_to_collapse, phylo_naive_inference_fuzz=phylo_naive_inference_fuzz, debug=debug) # this'll still return the cmdfo if the output exists (since we need it for parsing below), but we won't actually rerun it
2701
2703
  dtree = None
2702
2704
  origin = tree_inference_method
2703
2705
  else:
@@ -2730,7 +2732,7 @@ def get_trees_for_annotations(inf_lines_to_use, treefname=None, cpath=None, work
2730
2732
  continue
2731
2733
  dtree, inf_seqfos, inf_antn = run_tree_inference(tree_inference_method, annotation=line, actions='read', persistent_workdir=perswdir(iclust), cmdfo=cfo, glfo=glfo, seed_id=seed_id,
2732
2734
  only_pass_leaves=only_pass_leaves, collapse_duplicate_seqs=collapse_duplicate_seqs, keys_not_to_collapse=keys_not_to_collapse,
2733
- phylo_naive_inference=phylo_naive_inference, debug=debug)
2735
+ phylo_naive_inference_fuzz=phylo_naive_inference_fuzz, debug=debug)
2734
2736
  if tree_inference_method == 'linearham': # NOTE linearham infers the whole annotation, not just ancestral seqs (also note this annotation will have all of its sampled trees in l['tree-info']['linearham']['trees'], and logprob in ['logprob']
2735
2737
  for mkey in [k for k in utils.input_metafile_keys.values() if k in line]: # have to copy over any input meta keys
2736
2738
  inf_antn[mkey] = [utils.per_seq_val(line, mkey, u, use_default=True) for u in inf_antn['unique_ids']]
@@ -2805,7 +2807,7 @@ def add_smetrics(args, metrics_to_calc, annotations, lb_tau, inf_partition=None,
2805
2807
  if 'tree' in args.selection_metric_plot_cfg or any(m in metrics_to_calc for m in ['lbi', 'lbr', 'lbf', 'aa-lbi', 'aa-lbr', 'aa-lbf']): # get the tree if we're making tree plots or if any of the requested metrics need a tree
2806
2808
  treefos = get_trees_for_annotations(inf_lines_to_use, treefname=args.treefname, workdir=workdir, cluster_indices=args.cluster_indices, tree_inference_method=args.tree_inference_method,
2807
2809
  inf_outdir=tree_inference_outdir, glfo=glfo, parameter_dir=args.paired_outdir if args.paired_loci else args.parameter_dir, linearham_dir=args.linearham_dir,
2808
- seed_id=args.seed_unique_id, only_pass_leaves=args.infer_trees_with_only_leaves, phylo_naive_inference=args.phylo_naive_inference, debug=debug)
2810
+ seed_id=args.seed_unique_id, only_pass_leaves=args.infer_trees_with_only_leaves, phylo_naive_inference_fuzz=args.phylo_naive_inference_fuzz, debug=debug)
2809
2811
  check_cluster_indices(args.cluster_indices, n_after, inf_lines_to_use)
2810
2812
  n_already_there, n_skipped_uid = 0, 0
2811
2813
  final_inf_lines = []
@@ -3212,7 +3214,7 @@ def run_laplacian_spectra(treestr, workdir=None, plotdir=None, plotname=None, ti
3212
3214
  cmdlines = [
3213
3215
  'library(ape, quiet=TRUE)',
3214
3216
  # 'library(RPANDA, quiet=TRUE)', # old way, before I had to modify the source code because the CRAN version removes all eigenvalues <1 (for method="standard" -- with method="normal" it's <0, which is probably better, but it also seems to smoosh all the eigenvalues to be almost exactly 1)
3215
- 'library("RPANDA", lib.loc="%s/packages/RPANDA/lib", quiet=TRUE)' % os.path.dirname(os.path.realpath(__file__)).replace('/python', ''),
3217
+ 'library("RPANDA", lib.loc="%s/packages/RPANDA/lib", quiet=TRUE)' % utils.get_partis_dir(),
3216
3218
  'tree <- read.tree(text = "%s")' % treestr,
3217
3219
  # 'print(tree)',
3218
3220
  'specvals <- spectR(tree, method=c("standard"))', # compute eigenvalues (and some metrics describing the distribution, e.g. skewness, kurtosis, eigengap)
@@ -29,6 +29,7 @@ import operator
29
29
  import yaml
30
30
  import six
31
31
  import hashlib
32
+ from pathlib import Path
32
33
  from io import open
33
34
  try:
34
35
  from yaml import CLoader as Loader, CDumper as Dumper
@@ -50,7 +51,7 @@ def csv_wmode(mode='w'):
50
51
 
51
52
  # ----------------------------------------------------------------------------------------
52
53
  def get_partis_dir():
53
- return os.path.dirname(os.path.realpath(__file__)).replace('/python', '')
54
+ return str(Path(__file__).resolve().parent.parent)
54
55
 
55
56
  # ----------------------------------------------------------------------------------------
56
57
  def fsdir():
@@ -4570,7 +4571,7 @@ def add_naive_seq_aa(line):
4570
4571
  # ----------------------------------------------------------------------------------------
4571
4572
  # return naive sequence with uncertain bases (e.g. non-templated insertions) replace with Ns
4572
4573
  # n_fuzz: number of bases by which to expand non-templated insertions (set to negative value to mask entire cdr3 [excluding conserved codons])
4573
- def get_cdr3_masked_naive(antn, n_fuzz=3, debug=True):
4574
+ def get_cdr3_masked_naive(antn, n_fuzz=1, debug=True):
4574
4575
  if antn.get('is_fake_paired', False):
4575
4576
  raise Exception('can\'t mask fake paired annotation')
4576
4577
  masked_seq = antn['naive_seq']
@@ -7320,13 +7321,13 @@ def run_vsearch(action, seqdict, workdir, threshold, match_mismatch='2:-4', gap_
7320
7321
 
7321
7322
  # figure out which vsearch binary to use
7322
7323
  if vsearch_binary is None:
7323
- vsearch_binary = os.path.dirname(os.path.realpath(__file__)).replace('/python', '') + '/bin'
7324
7324
  if platform.system() == 'Linux':
7325
- vsearch_binary += '/vsearch-2.4.3-linux-x86_64'
7325
+ binstr = 'linux'
7326
7326
  elif platform.system() == 'Darwin':
7327
- vsearch_binary += '/vsearch-2.4.3-macos-x86_64'
7327
+ binstr += 'macos'
7328
7328
  else:
7329
7329
  raise Exception('%s no vsearch binary in bin/ for platform \'%s\' (you can specify your own full vsearch path with --vsearch-binary)' % (color('red', 'error'), platform.system()))
7330
+ vsearch_binary = '%s/bin/vsearch-2.4.3-%s-x86_64' % (get_partis_dir(), binstr)
7330
7331
 
7331
7332
  # build command
7332
7333
  cmd = vsearch_binary
@@ -7416,7 +7417,7 @@ def run_swarm(seqs, workdir, differences=1, n_procs=1):
7416
7417
  for name, seq in seqs.items():
7417
7418
  fastafile.write('>%s_%d\n%s\n' % (name, dummy_abundance, remove_ambiguous_ends(seq).replace('N', 'A')))
7418
7419
 
7419
- cmd = os.path.dirname(os.path.realpath(__file__)).replace('/python', '') + '/bin/swarm-2.1.13-linux-x86_64 ' + infname
7420
+ cmd = '%s/bin/swarm-2.1.13-linux-x86_64 %s' % (get_partis_dir(), infname)
7420
7421
  cmd += ' --differences ' + str(differences)
7421
7422
  if differences == 1:
7422
7423
  cmd += ' --fastidious'
@@ -7531,7 +7532,13 @@ def get_chimera_max_abs_diff(line, iseq, chunk_len=75, max_ambig_frac=0.1, debug
7531
7532
 
7532
7533
  # ----------------------------------------------------------------------------------------
7533
7534
  def get_version_info(debug=False):
7534
- git_dir = os.path.dirname(os.path.realpath(__file__)).replace('/python', '/.git')
7535
+ git_dir = '%s/.git' % get_partis_dir()
7536
+ if not os.path.exists(git_dir):
7537
+ try:
7538
+ from importlib.metadata import version
7539
+ return {'tag': version('partis-bcr'), 'commit': 'installed'}
7540
+ except ImportError:
7541
+ return {'tag': 'unknown', 'commit': 'installed'}
7535
7542
  vinfo = {}
7536
7543
  vinfo['commit'] = subprocess.check_output(['git', '--git-dir', git_dir, 'rev-parse', 'HEAD'], universal_newlines=True).strip()
7537
7544
  if debug:
packages/ham/bcrham DELETED
Binary file
partis/main.py DELETED
@@ -1,59 +0,0 @@
1
- #!/usr/bin/env python3
2
- """
3
- Main entry point for partis package
4
- """
5
-
6
- import os
7
- import sys
8
-
9
- def main():
10
- """Main entry point for partis command line interface."""
11
- # Find the partis installation directory
12
- # If installed via pip, this will be in site-packages/partis/
13
- # If in development, it should find the root directory
14
- current_dir = os.path.dirname(os.path.realpath(__file__))
15
-
16
- # Look for the partis root directory
17
- partis_dir = None
18
- search_paths = [
19
- os.path.dirname(current_dir), # ../
20
- os.path.dirname(os.path.dirname(current_dir)), # ../../ (for site-packages/partis/main.py)
21
- ]
22
-
23
- for search_path in search_paths:
24
- if os.path.exists(os.path.join(search_path, 'bin', 'partis')):
25
- partis_dir = search_path
26
- break
27
-
28
- if partis_dir is None:
29
- # Try to use the current directory structure assuming pip install
30
- partis_dir = os.path.dirname(current_dir)
31
- if not os.path.exists(os.path.join(partis_dir, 'data')):
32
- print('Error: Could not locate partis installation directory')
33
- sys.exit(1)
34
-
35
- # Set up environment for partis
36
- sys.path.insert(0, partis_dir)
37
- os.environ['PARTIS_DIR'] = partis_dir
38
-
39
- # Import and execute the partis main functionality
40
- try:
41
- # Try to import the original partis logic
42
- original_partis = os.path.join(partis_dir, 'bin', 'partis')
43
- if os.path.exists(original_partis):
44
- # Read and execute the original script, but set up the environment first
45
- globals_dict = {'__file__': original_partis}
46
- with open(original_partis, 'r') as f:
47
- partis_code = f.read()
48
- exec(partis_code, globals_dict)
49
- else:
50
- print(f'Error: partis script not found at {original_partis}')
51
- sys.exit(1)
52
- except Exception as e:
53
- print(f'Error running partis: {e}')
54
- import traceback
55
- traceback.print_exc()
56
- sys.exit(1)
57
-
58
- if __name__ == '__main__':
59
- main()
@@ -1 +0,0 @@
1
- partis
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