b2bTools 3.0.7b2__tar.gz → 3.0.8b3__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.
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/PKG-INFO +3 -71
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/__main__.py +1 -1
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/Io.py +115 -15
- b2bTools-3.0.8b3/b2bTools/multipleSeq/Predictor.py +266 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/multipleSeq/msa_core.py +14 -10
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/nmr/shiftCrypt/shiftCrypt.py +20 -21
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/nmr/shiftCrypt/shiftcrypt_pkg/utils.py +1 -18
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/Agmata/sources/agmata_source.py +1 -1
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/standalone.py +12 -6
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/runpsipred_single.py +1 -1
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/vettore_gen.py +1 -1
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/PSPer/hmmer_research/hmmsearch_otf.py +4 -3
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/wrapper_source/wrapper_utils.py +37 -14
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools.egg-info/PKG-INFO +3 -71
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools.egg-info/requires.txt +8 -13
- b2bTools-3.0.8b3/b2bTools_version/versioning.py +2 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/requirements-py310.txt +2 -3
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/requirements-py311.txt +2 -2
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/requirements-py312.txt +2 -2
- b2bTools-3.0.8b3/requirements-py37.txt +10 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/requirements-py38.txt +2 -3
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/requirements-py39.txt +2 -3
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/setup.py +4 -4
- b2bTools-3.0.7b2/b2bTools/multipleSeq/Predictor.py +0 -153
- b2bTools-3.0.7b2/b2bTools_version/versioning.py +0 -2
- b2bTools-3.0.7b2/requirements-py37.txt +0 -12
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/MANIFEST.in +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/README.md +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/__init__.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/Util.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/__init__.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/bmrb/File.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/bmrb/SaveFrame.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/bmrb/TagTable.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/bmrb/Text.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/bmrb/Utils.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/bmrb/__init__.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/bmrb/base.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/__init__.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/__init__.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/general/Constants.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/general/Util.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/general/__init__.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/general/formatIO.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/nmrStar/__init__.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/nmrStar/chemShiftsIO.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/nmrStar/constants.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/nmrStar/coordinatesIO.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/nmrStar/csaIO.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/nmrStar/dihedralConstraintsIO.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/nmrStar/distanceConstraintsIO.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/nmrStar/generalIO.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/nmrStar/hBondConstraintsIO.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/nmrStar/hExchProtectionIO.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/nmrStar/hExchRateIO.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/nmrStar/hetNoeIO.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/nmrStar/jCouplingIO.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/nmrStar/nmrStarDict.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/nmrStar/orderParamIO.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/nmrStar/peopleAndCitationsIO.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/nmrStar/projectIO.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/nmrStar/rdcConstraintsIO.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/nmrStar/rdcIO.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/nmrStar/sequenceIO.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/nmrStar/t1RelaxIO.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/nmrStar/t1RhoRelaxIO.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/nmrStar/t2RelaxIO.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/format/nmrStar/util.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/general/Constants.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/general/__init__.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/universal/Constants.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/universal/Io.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/universal/Util.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/ccpn/universal/__init__.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/parsers/__init__.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/parsers/alignments.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/parsers/fasta.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/parsers/nef.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/parsers/nmr_star.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/general/plotter.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/multipleSeq/__init__.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/multipleSeq/mapToMSA.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/multipleSeq/msa_plot.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/multipleSeq/msa_quantification.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/nmr/__init__.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/nmr/shiftCrypt/Predictor.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/nmr/shiftCrypt/__init__.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/nmr/shiftCrypt/alignment.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/nmr/shiftCrypt/models/__init__.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/nmr/shiftCrypt/models/new_NH.mtorch +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/nmr/shiftCrypt/models/new_NH_p27.mtorch +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/nmr/shiftCrypt/models/new_NH_p37.mtorch +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/nmr/shiftCrypt/models/new_commons.mtorch +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/nmr/shiftCrypt/models/new_commons_p27.mtorch +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/nmr/shiftCrypt/models/new_commons_p37.mtorch +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/nmr/shiftCrypt/models/new_full.mtorch +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/nmr/shiftCrypt/models/new_full_p27.mtorch +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/nmr/shiftCrypt/models/new_full_p37.mtorch +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/nmr/shiftCrypt/shiftcrypt_pkg/__init__.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/nmr/shiftCrypt/shiftcrypt_pkg/autoenc_solo4.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/nmr/shiftCrypt/shiftcrypt_pkg/autoenchoder_standalone_version.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/nmr/shiftCrypt/shiftcrypt_pkg/chemical_shifts_custom_model.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/nmr/shiftCrypt/shiftcrypt_pkg/parser.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/nmr/shiftCrypt/shiftcrypt_pkg/shiftcrypt_parser.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/requirements-dev.txt +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/requirements.txt +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/Agmata/Predictor.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/Agmata/__init__.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/Agmata/agmata.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/Agmata/bin/__init__.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/Agmata/bin/agmata_c_final_linux +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/Agmata/bin/agmata_c_final_mac +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/Agmata/marshalled/__init__.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/Agmata/marshalled/agmata_discriminative_converted.m +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/Agmata/marshalled/discriminative.m +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/Agmata/marshalled/model_parameters.m +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/Agmata/sources/__init__.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/Predictor.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/__init__.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/disomine_converted.mtorch +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/gru80_final.mtorch +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/torch_NN_gru_80AUC_prova.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/.DS_Store +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/__init__.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/psipred/.DS_Store +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/psipred/__init__.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/psipred/bin/__init__.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/psipred/bin/linux/__init__.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/psipred/bin/linux/chkparse +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/psipred/bin/linux/psipass2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/psipred/bin/linux/psipred +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/psipred/bin/linux/seq2mtx +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/psipred/bin/osx/__init__.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/psipred/bin/osx/chkparse +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/psipred/bin/osx/psipass2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/psipred/bin/osx/psipred +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/psipred/bin/osx/seq2mtx +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/psipred/data/__init__.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/psipred/data/weights.dat +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/psipred/data/weights.dat2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/psipred/data/weights.dat3 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/psipred/data/weights_p2.dat +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/psipred/data/weights_s.dat +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/psipred/data/weights_s.dat2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DisoMine/vector_builder/psipred/data/weights_s.dat3 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/Predictor.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/__init__.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/__init__.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/backbone/README.txt +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/backbone/__init__.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/backbone/read11.model.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/backbone/read13.model.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/backbone/read15.model.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/backbone/read17.model.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/backbone/read19.model.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/backbone/read21.model.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/backbone/read23.model.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/backbone/read25.model.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/backbone/read3.model.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/backbone/read5.model.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/backbone/read51.model.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/backbone/read7.model.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/backbone/read9.model.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/coil/__init__.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/coil/read11.model_new.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/coil/read13.model_new.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/coil/read15.model_new.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/coil/read17.model_new.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/coil/read19.model_new.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/coil/read25.model_new.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/coil/read3.model_new.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/coil/read38.model_new.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/coil/read5.model_new.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/coil/read51.model_new.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/coil/read7.model_new.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/coil/read9.model_new.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/helix/__init__.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/helix/read11.model_new.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/helix/read13.model_new.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/helix/read15.model_new.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/helix/read17.model_new.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/helix/read19.model_new.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/helix/read25.model_new.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/helix/read3.model_new.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/helix/read38.model_new.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/helix/read5.model_new.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/helix/read51.model_new.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/helix/read7.model_new.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/helix/read9.model_new.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/ppII/__init__.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/ppII/read11.model_new.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/ppII/read13.model_new.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/ppII/read15.model_new.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/ppII/read17.model_new.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/ppII/read19.model_new.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/ppII/read25.model_new.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/ppII/read3.model_new.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/ppII/read38.model_new.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/ppII/read5.model_new.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/ppII/read51.model_new.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/ppII/read7.model_new.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/ppII/read9.model_new.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sheet/__init__.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sheet/read11.model_new.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sheet/read13.model_new.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sheet/read15.model_new.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sheet/read17.model_new.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sheet/read19.model_new.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sheet/read25.model_new.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sheet/read3.model_new.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sheet/read38.model_new.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sheet/read5.model_new.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sheet/read51.model_new.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sheet/read7.model_new.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sheet/read9.model_new.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sidechain/README.txt +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sidechain/__init__.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sidechain/read11.model.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sidechain/read13.model.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sidechain/read15.model.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sidechain/read17.model.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sidechain/read19.model.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sidechain/read21.model.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sidechain/read23.model.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sidechain/read25.model.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sidechain/read3.model.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sidechain/read5.model.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sidechain/read51.model.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sidechain/read7.model.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/DynaMine/models/sidechain/read9.model.pkl.bz2 +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/EFoldMine/Predictor.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/EFoldMine/__init__.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/EFoldMine/models/__init__.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/EFoldMine/models/efModelRBF2016.proba.cPickle +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/EFoldMine/models/efoldmine_converted.cPickle +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/PSPer/Constants.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/PSPer/PSPer.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/PSPer/Predictor.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/PSPer/__init__.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/PSPer/hmmer_research/PF00270_DEAD_seed.txt +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/PSPer/hmmer_research/__init__.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/PSPer/hmmer_research/phase_trans.hmm +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/PSPer/hmmer_research/rrm_align.pfam +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/PSPer/marshalled/__init__.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/PSPer/marshalled/emissions.m +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/PSPer/marshalled/scaler.m +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/PSPer/marshalled/scaler_new.m +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/PSPer/phase_transition_hmm.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/PSPer/source/__init__.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/PSPer/source/utils.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/PSPer/standalone.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/PSPer/torch_NN_gru_80AUC_prova.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/Predictor.py +4 -4
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/README.md +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/__init__.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/constants.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/singleSeq/single_core.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/web_predictor.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/wrapper_source/__init__.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools/wrapper_source/metadata.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools.egg-info/SOURCES.txt +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools.egg-info/dependency_links.txt +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools.egg-info/entry_points.txt +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools.egg-info/top_level.txt +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/b2bTools_version/__init__.py +0 -0
- {b2bTools-3.0.7b2 → b2bTools-3.0.8b3}/setup.cfg +0 -0
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: b2bTools
|
|
3
|
-
Version: 3.0.
|
|
3
|
+
Version: 3.0.8b3
|
|
4
4
|
Summary: bio2Byte software suite to predict protein biophysical properties from their amino-acid sequences
|
|
5
5
|
Home-page: https://bio2byte.be
|
|
6
6
|
Author: Wim Vranken
|
|
7
7
|
Author-email: Wim.Vranken@vub.be
|
|
8
|
-
Maintainer:
|
|
9
|
-
Maintainer-email:
|
|
8
|
+
Maintainer: Adrián Díaz, Sophie-Luise Heidig, Wim Vranken
|
|
9
|
+
Maintainer-email: adrian.diaz@vub.be, wim.vranken@vub.be
|
|
10
10
|
License: OSI Approved :: GNU General Public License v3 (GPLv3)
|
|
11
11
|
Project-URL: Documentation, https://bio2byte.be/b2btools/package-documentation
|
|
12
12
|
Project-URL: HTML interface, https://bio2byte.be/b2btools
|
|
@@ -29,74 +29,6 @@ Classifier: Intended Audience :: Education
|
|
|
29
29
|
Classifier: Development Status :: 5 - Production/Stable
|
|
30
30
|
Requires-Python: >=3.7, <3.13
|
|
31
31
|
Description-Content-Type: text/markdown
|
|
32
|
-
Requires-Dist: biopython~=1.81; python_version == "3.7"
|
|
33
|
-
Requires-Dist: Cython~=0.29.37; python_version == "3.7"
|
|
34
|
-
Requires-Dist: matplotlib~=3.5.3; python_version == "3.7"
|
|
35
|
-
Requires-Dist: numpy~=1.21; python_version == "3.7"
|
|
36
|
-
Requires-Dist: pandas~=1.1; python_version == "3.7"
|
|
37
|
-
Requires-Dist: pomegranate~=0.14; python_version == "3.7"
|
|
38
|
-
Requires-Dist: requests~=2.0; python_version == "3.7"
|
|
39
|
-
Requires-Dist: scikit-learn~=1.0.2; python_version == "3.7"
|
|
40
|
-
Requires-Dist: scipy==1.7.3; python_version == "3.7"
|
|
41
|
-
Requires-Dist: torch==1.13.1; python_version == "3.7"
|
|
42
|
-
Requires-Dist: torchvision==0.14.1; python_version == "3.7"
|
|
43
|
-
Requires-Dist: urllib3~=1.26.6; python_version == "3.7"
|
|
44
|
-
Requires-Dist: biopython~=1.81; python_version == "3.8"
|
|
45
|
-
Requires-Dist: Cython~=0.29.37; python_version == "3.8"
|
|
46
|
-
Requires-Dist: matplotlib~=3.5.3; python_version == "3.8"
|
|
47
|
-
Requires-Dist: numpy~=1.24; python_version == "3.8"
|
|
48
|
-
Requires-Dist: pandas~=1.1; python_version == "3.8"
|
|
49
|
-
Requires-Dist: pomegranate~=0.14; python_version == "3.8"
|
|
50
|
-
Requires-Dist: requests~=2.0; python_version == "3.8"
|
|
51
|
-
Requires-Dist: scikit-learn~=1.0.2; python_version == "3.8"
|
|
52
|
-
Requires-Dist: scipy==1.10.1; python_version == "3.8"
|
|
53
|
-
Requires-Dist: torch==1.13.1; python_version == "3.8"
|
|
54
|
-
Requires-Dist: torchvision==0.14.1; python_version == "3.8"
|
|
55
|
-
Requires-Dist: urllib3~=1.26.6; python_version == "3.8"
|
|
56
|
-
Requires-Dist: biopython~=1.81; python_version == "3.9"
|
|
57
|
-
Requires-Dist: Cython~=0.29.37; python_version == "3.9"
|
|
58
|
-
Requires-Dist: matplotlib~=3.5.3; python_version == "3.9"
|
|
59
|
-
Requires-Dist: numpy~=1.24; python_version == "3.9"
|
|
60
|
-
Requires-Dist: pandas~=1.1; python_version == "3.9"
|
|
61
|
-
Requires-Dist: pomegranate~=0.14; python_version == "3.9"
|
|
62
|
-
Requires-Dist: requests~=2.0; python_version == "3.9"
|
|
63
|
-
Requires-Dist: scikit-learn~=1.0.2; python_version == "3.9"
|
|
64
|
-
Requires-Dist: scipy==1.10.1; python_version == "3.9"
|
|
65
|
-
Requires-Dist: torch==1.13.1; python_version == "3.9"
|
|
66
|
-
Requires-Dist: torchvision==0.14.1; python_version == "3.9"
|
|
67
|
-
Requires-Dist: urllib3~=1.26.6; python_version == "3.9"
|
|
68
|
-
Requires-Dist: biopython~=1.83; python_version == "3.10"
|
|
69
|
-
Requires-Dist: Cython~=0.29.37; python_version == "3.10"
|
|
70
|
-
Requires-Dist: matplotlib~=3.5.3; python_version == "3.10"
|
|
71
|
-
Requires-Dist: numpy~=1.26.4; python_version == "3.10"
|
|
72
|
-
Requires-Dist: pandas~=1.5.3; python_version == "3.10"
|
|
73
|
-
Requires-Dist: pomegranate~=0.14; python_version == "3.10"
|
|
74
|
-
Requires-Dist: requests~=2.31.0; python_version == "3.10"
|
|
75
|
-
Requires-Dist: scikit-learn~=1.0.2; python_version == "3.10"
|
|
76
|
-
Requires-Dist: scipy~=1.12.0; python_version == "3.10"
|
|
77
|
-
Requires-Dist: torch~=1.13.1; python_version == "3.10"
|
|
78
|
-
Requires-Dist: torchvision~=0.14.1; python_version == "3.10"
|
|
79
|
-
Requires-Dist: urllib3~=1.26.6; python_version == "3.10"
|
|
80
|
-
Requires-Dist: biopython~=1.83; python_version == "3.11"
|
|
81
|
-
Requires-Dist: matplotlib~=3.8.3; python_version == "3.11"
|
|
82
|
-
Requires-Dist: numpy~=1.26.4; python_version == "3.11"
|
|
83
|
-
Requires-Dist: pandas~=1.5.3; python_version == "3.11"
|
|
84
|
-
Requires-Dist: pomegranate~=0.14.9; python_version == "3.11"
|
|
85
|
-
Requires-Dist: requests~=2.31.0; python_version == "3.11"
|
|
86
|
-
Requires-Dist: scikit-learn~=1.4.1.post1; python_version == "3.11"
|
|
87
|
-
Requires-Dist: scipy~=1.12.0; python_version == "3.11"
|
|
88
|
-
Requires-Dist: torch~=2.2.0; python_version == "3.11"
|
|
89
|
-
Requires-Dist: urllib3~=1.26.18; python_version == "3.11"
|
|
90
|
-
Requires-Dist: biopython~=1.83; python_version == "3.12"
|
|
91
|
-
Requires-Dist: matplotlib~=3.8.3; python_version == "3.12"
|
|
92
|
-
Requires-Dist: numpy~=1.26.4; python_version == "3.12"
|
|
93
|
-
Requires-Dist: pandas~=2.1.0; python_version == "3.12"
|
|
94
|
-
Requires-Dist: pomegranate~=0.14.9; python_version == "3.12"
|
|
95
|
-
Requires-Dist: requests~=2.31.0; python_version == "3.12"
|
|
96
|
-
Requires-Dist: scikit-learn~=1.4.1.post1; python_version == "3.12"
|
|
97
|
-
Requires-Dist: scipy~=1.12.0; python_version == "3.12"
|
|
98
|
-
Requires-Dist: torch~=2.2.0; python_version == "3.12"
|
|
99
|
-
Requires-Dist: urllib3~=1.26.6; python_version == "3.12"
|
|
100
32
|
|
|
101
33
|
<h1 align="center">
|
|
102
34
|
<a href="bio2byte.be/b2btools" target="_blank" ref="noreferrer noopener">
|
|
@@ -109,7 +109,7 @@ def run(parsed_args):
|
|
|
109
109
|
logging.info(f"Saving results for {sequence_key} in tabular format in: {output_tabular_file}")
|
|
110
110
|
wrapper.get_all_predictions_tabular(output_tabular_file, sep=sep, sequence_key=sequence_key)
|
|
111
111
|
else:
|
|
112
|
-
logging.info(f"Saving results
|
|
112
|
+
logging.info(f"Saving results in tabular format in: {output_tabular_file}")
|
|
113
113
|
wrapper.get_all_predictions_tabular(output_tabular_file, sep=sep)
|
|
114
114
|
|
|
115
115
|
if metadata_file:
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import
|
|
2
|
-
import os
|
|
1
|
+
import csv
|
|
3
2
|
import json
|
|
4
|
-
import
|
|
5
|
-
from urllib.parse import urljoin
|
|
6
|
-
from io import StringIO
|
|
3
|
+
import os
|
|
7
4
|
import time
|
|
8
|
-
import
|
|
5
|
+
from io import StringIO
|
|
6
|
+
from urllib.parse import urljoin
|
|
9
7
|
|
|
8
|
+
import requests
|
|
10
9
|
from b2bTools.singleSeq import constants
|
|
11
10
|
|
|
11
|
+
|
|
12
12
|
class B2bIo:
|
|
13
13
|
def __init__(self, gapCode='-'):
|
|
14
14
|
self.gapCode = gapCode
|
|
@@ -233,7 +233,7 @@ class B2bIo:
|
|
|
233
233
|
elif lines[0].startswith("# STOCKHOLM"):
|
|
234
234
|
fileType = 'STOCKHOLM'
|
|
235
235
|
else:
|
|
236
|
-
fastaCount = balibaseCount = psiCount = blastCount = emptyLine =
|
|
236
|
+
fastaCount = balibaseCount = psiCount = blastCount = emptyLine = 0
|
|
237
237
|
for line in lines:
|
|
238
238
|
if line.startswith(">"):
|
|
239
239
|
fastaCount += 1
|
|
@@ -245,13 +245,13 @@ class B2bIo:
|
|
|
245
245
|
blastCount += 1
|
|
246
246
|
elif not line.strip():
|
|
247
247
|
emptyLine += 1
|
|
248
|
-
elif fastaCount and line.count(gapCode):
|
|
249
|
-
|
|
248
|
+
# elif fastaCount and line.count(gapCode):
|
|
249
|
+
# fastaGaps += 1
|
|
250
250
|
|
|
251
251
|
if fastaCount > balibaseCount and fastaCount > blastCount:
|
|
252
252
|
if fileName.endswith('a3m'):
|
|
253
253
|
fileType = 'A3M'
|
|
254
|
-
|
|
254
|
+
else: # <--- There could be alignments without gaps (-)
|
|
255
255
|
fileType = 'FASTA'
|
|
256
256
|
elif blastCount:
|
|
257
257
|
fileType = 'Blast'
|
|
@@ -267,7 +267,7 @@ class B2bIo:
|
|
|
267
267
|
|
|
268
268
|
assert fileType, "Alignment file not recognised"
|
|
269
269
|
|
|
270
|
-
print("Reading {} alignment...".format(fileType))
|
|
270
|
+
# print("Reading {} alignment...".format(fileType))
|
|
271
271
|
|
|
272
272
|
self.alignRefSeqID = None
|
|
273
273
|
if fileType == 'CLUSTAL':
|
|
@@ -320,23 +320,26 @@ class B2bIo:
|
|
|
320
320
|
|
|
321
321
|
return seqAlignments
|
|
322
322
|
|
|
323
|
-
def
|
|
323
|
+
def readAlignmentsA3M_old(self, lines):
|
|
324
324
|
|
|
325
325
|
"""
|
|
326
326
|
A3M file alignment, need some magic here to align things decently
|
|
327
327
|
"""
|
|
328
328
|
|
|
329
|
-
startReading = True
|
|
329
|
+
# startReading = True
|
|
330
330
|
sequences = {}
|
|
331
331
|
|
|
332
332
|
for line in lines:
|
|
333
|
+
if line.startswith("#"):
|
|
334
|
+
continue
|
|
333
335
|
|
|
336
|
+
seqId = None
|
|
334
337
|
cols = line.split()
|
|
335
338
|
|
|
336
339
|
if cols:
|
|
337
|
-
|
|
338
340
|
if cols[0].startswith('>'):
|
|
339
341
|
seqId = self.getSeqIdKey(cols[0][1:])
|
|
342
|
+
|
|
340
343
|
if not self.alignRefSeqID:
|
|
341
344
|
self.alignRefSeqID = seqId
|
|
342
345
|
else:
|
|
@@ -378,6 +381,103 @@ class B2bIo:
|
|
|
378
381
|
|
|
379
382
|
return seqAlignments
|
|
380
383
|
|
|
384
|
+
def readAlignmentsA3M(self, lines):
|
|
385
|
+
"""
|
|
386
|
+
Parse alignments from an A3M formatted file and produce aligned sequences.
|
|
387
|
+
|
|
388
|
+
In the A3M format, aligned columns are represented by uppercase letters,
|
|
389
|
+
whereas insertions relative to the reference are in lowercase. This function
|
|
390
|
+
collects sequences from the FASTA-like format (handling multi-line sequences)
|
|
391
|
+
and then constructs the multiple sequence alignment based on the reference sequence.
|
|
392
|
+
The first encountered sequence header is used as the reference.
|
|
393
|
+
|
|
394
|
+
Parameters
|
|
395
|
+
----------
|
|
396
|
+
lines : List[str]
|
|
397
|
+
List of lines from the A3M file.
|
|
398
|
+
|
|
399
|
+
Returns
|
|
400
|
+
-------
|
|
401
|
+
Dict[str, str]
|
|
402
|
+
Dictionary that maps each sequence ID to its aligned sequence.
|
|
403
|
+
"""
|
|
404
|
+
sequences = {}
|
|
405
|
+
current_seq_id = ""
|
|
406
|
+
|
|
407
|
+
# Process file lines: skip blank lines and comments, and handle headers and sequence lines.
|
|
408
|
+
for line in lines:
|
|
409
|
+
line = line.strip()
|
|
410
|
+
if not line:
|
|
411
|
+
self.setEmptyLineVars()
|
|
412
|
+
continue
|
|
413
|
+
if line.startswith("#"):
|
|
414
|
+
continue
|
|
415
|
+
if line.startswith('>'):
|
|
416
|
+
# Extract header fields split by tab and use only the first token as the sequence id.
|
|
417
|
+
header_fields = line[1:].strip().split("\t")
|
|
418
|
+
current_seq_id = self.getSeqIdKey(header_fields[0])
|
|
419
|
+
|
|
420
|
+
if current_seq_id not in sequences:
|
|
421
|
+
sequences[current_seq_id] = ""
|
|
422
|
+
if not hasattr(self, 'alignRefSeqID') or not self.alignRefSeqID:
|
|
423
|
+
self.alignRefSeqID = current_seq_id
|
|
424
|
+
else:
|
|
425
|
+
# Append the sequence portion to the current sequence.
|
|
426
|
+
if not current_seq_id:
|
|
427
|
+
# No valid header was encountered prior to this line; skip it.
|
|
428
|
+
continue
|
|
429
|
+
sequences[current_seq_id] += line.strip()
|
|
430
|
+
|
|
431
|
+
if not sequences:
|
|
432
|
+
return {}
|
|
433
|
+
|
|
434
|
+
# Initialize pointer indexes and alignment builders for each sequence.
|
|
435
|
+
seqIndexes = {seqId: 0 for seqId in sequences}
|
|
436
|
+
seqAlignments = {seqId: "" for seqId in sequences}
|
|
437
|
+
seqIds = list(sequences.keys())
|
|
438
|
+
|
|
439
|
+
# Ensure we have a valid reference sequence.
|
|
440
|
+
if self.alignRefSeqID not in sequences:
|
|
441
|
+
self.alignRefSeqID = seqIds[0]
|
|
442
|
+
|
|
443
|
+
ref_seq = sequences[self.alignRefSeqID]
|
|
444
|
+
|
|
445
|
+
# Walk through the reference sequence positions.
|
|
446
|
+
while seqIndexes[self.alignRefSeqID] < len(ref_seq):
|
|
447
|
+
currentColChars = []
|
|
448
|
+
# Build the current column from each sequence.
|
|
449
|
+
for seqId in seqIds:
|
|
450
|
+
# If the current sequence is shorter than expected, use gap.
|
|
451
|
+
if seqIndexes[seqId] < len(sequences[seqId]):
|
|
452
|
+
currentColChars.append(sequences[seqId][seqIndexes[seqId]])
|
|
453
|
+
else:
|
|
454
|
+
currentColChars.append(self.gapCode)
|
|
455
|
+
col_str = "".join(currentColChars)
|
|
456
|
+
|
|
457
|
+
# If all characters in the column are uppercase, it's an aligned column.
|
|
458
|
+
if col_str == col_str.upper():
|
|
459
|
+
for seqId in seqIds:
|
|
460
|
+
seqAlignments[seqId] += sequences[seqId][seqIndexes[seqId]]
|
|
461
|
+
seqIndexes[seqId] += 1
|
|
462
|
+
else:
|
|
463
|
+
# Otherwise, process insertions:
|
|
464
|
+
for seqId in seqIds:
|
|
465
|
+
if seqId == self.alignRefSeqID:
|
|
466
|
+
# Always consume a character for the reference.
|
|
467
|
+
seqAlignments[seqId] += sequences[seqId][seqIndexes[seqId]]
|
|
468
|
+
seqIndexes[seqId] += 1
|
|
469
|
+
else:
|
|
470
|
+
if (seqIndexes[seqId] < len(sequences[seqId])
|
|
471
|
+
and sequences[seqId][seqIndexes[seqId]].islower()):
|
|
472
|
+
# For an insertion character, add its uppercase version.
|
|
473
|
+
seqAlignments[seqId] += sequences[seqId][seqIndexes[seqId]].upper()
|
|
474
|
+
seqIndexes[seqId] += 1
|
|
475
|
+
else:
|
|
476
|
+
# For non-insertion (or missing) character, insert a gap.
|
|
477
|
+
seqAlignments[seqId] += self.gapCode
|
|
478
|
+
|
|
479
|
+
return seqAlignments
|
|
480
|
+
|
|
381
481
|
def readAlignmentsBlast(self, lines):
|
|
382
482
|
|
|
383
483
|
print("Warning: BLAST format, not the full sequences in the alignment!")
|
|
@@ -387,7 +487,7 @@ class B2bIo:
|
|
|
387
487
|
|
|
388
488
|
refQuerySeqId = ""
|
|
389
489
|
|
|
390
|
-
maxQueryLen = 0
|
|
490
|
+
# maxQueryLen = 0
|
|
391
491
|
|
|
392
492
|
for line in lines:
|
|
393
493
|
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
import numpy as np
|
|
2
|
+
from b2bTools.general.Io import B2bIo
|
|
3
|
+
from b2bTools.singleSeq.constants import DISTRIBUTION_KEYS
|
|
4
|
+
from b2bTools.singleSeq.Predictor import MineSuite
|
|
5
|
+
from sklearn import mixture
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class MineSuiteMSA(MineSuite):
|
|
9
|
+
|
|
10
|
+
scriptName = "b2bTools.msaBased.Predictor"
|
|
11
|
+
|
|
12
|
+
def predictSeqsFromMSA(self, msaFile, gapCode='-', predTypes=[]):
|
|
13
|
+
# This will read in alignment, should automatically detect format. Code is in general/Io.py
|
|
14
|
+
self.seqAlignments = self.readAlignments(msaFile, resetAlignRefSeqID=True, gapCode=gapCode)
|
|
15
|
+
|
|
16
|
+
single_sequences = [(seqId, self.seqAlignments[seqId].replace(gapCode, '')) for seqId in self.seqAlignments.keys()]
|
|
17
|
+
|
|
18
|
+
self.predictSeqs(single_sequences, predTypes=predTypes)
|
|
19
|
+
|
|
20
|
+
# Now self.allPredictions will give you the predictions for all the individual sequences in the MSA!
|
|
21
|
+
|
|
22
|
+
def predictAndMapSeqsFromMSA(self, msaFile, gapCode='-', dataRead=False, predTypes=[]):
|
|
23
|
+
# Read in data only if not yet present - can re-use this function within instance of class if data already present!
|
|
24
|
+
if not dataRead:
|
|
25
|
+
self.predictSeqsFromMSA(msaFile, gapCode=gapCode, predTypes=[*predTypes])
|
|
26
|
+
|
|
27
|
+
self.allSeqIds = list(self.seqAlignments.keys())
|
|
28
|
+
self.allSeqIds.sort()
|
|
29
|
+
|
|
30
|
+
# All the current prediction types
|
|
31
|
+
prediction_keynames = list(self.allPredictions[self.allSeqIds[0]].keys())
|
|
32
|
+
|
|
33
|
+
execution_times = []
|
|
34
|
+
single_values = []
|
|
35
|
+
|
|
36
|
+
if 'dynamine_execution_time' in prediction_keynames:
|
|
37
|
+
prediction_keynames.remove('dynamine_execution_time')
|
|
38
|
+
execution_times.append('dynamine_execution_time')
|
|
39
|
+
|
|
40
|
+
if 'disomine_execution_time' in prediction_keynames:
|
|
41
|
+
prediction_keynames.remove('disomine_execution_time')
|
|
42
|
+
execution_times.append('disomine_execution_time')
|
|
43
|
+
|
|
44
|
+
if 'efoldmine_execution_time' in prediction_keynames:
|
|
45
|
+
prediction_keynames.remove('efoldmine_execution_time')
|
|
46
|
+
execution_times.append('efoldmine_execution_time')
|
|
47
|
+
|
|
48
|
+
if 'agmata_execution_time' in prediction_keynames:
|
|
49
|
+
prediction_keynames.remove('agmata_execution_time')
|
|
50
|
+
execution_times.append('agmata_execution_time')
|
|
51
|
+
|
|
52
|
+
if 'psper_execution_time' in prediction_keynames:
|
|
53
|
+
prediction_keynames.remove('psper_execution_time')
|
|
54
|
+
execution_times.append('psper_execution_time')
|
|
55
|
+
|
|
56
|
+
if 'protein_score' in prediction_keynames:
|
|
57
|
+
prediction_keynames.remove('protein_score')
|
|
58
|
+
single_values.append('protein_score')
|
|
59
|
+
|
|
60
|
+
# self.predictionTypes = predictionTypes
|
|
61
|
+
self.prediction_keynames = prediction_keynames
|
|
62
|
+
self.allAlignedPredictions = {}
|
|
63
|
+
|
|
64
|
+
sequenceInfo = {}
|
|
65
|
+
|
|
66
|
+
for seq_id in self.allSeqIds:
|
|
67
|
+
current_aligned_residues = self.seqAlignments[seq_id]
|
|
68
|
+
current_prediction_values = self.allPredictions[seq_id]
|
|
69
|
+
|
|
70
|
+
sequenceInfo[seq_id] = []
|
|
71
|
+
self.allAlignedPredictions[seq_id] = {}
|
|
72
|
+
|
|
73
|
+
sequence_residue_index = 0
|
|
74
|
+
for current_aligned_residue in current_aligned_residues:
|
|
75
|
+
sequenceInfo[seq_id].append(current_aligned_residue)
|
|
76
|
+
residues_matching = current_aligned_residue != self.gapCode
|
|
77
|
+
|
|
78
|
+
for predictionType in prediction_keynames:
|
|
79
|
+
if predictionType not in self.allAlignedPredictions[seq_id]:
|
|
80
|
+
self.allAlignedPredictions[seq_id][predictionType] = []
|
|
81
|
+
|
|
82
|
+
if not residues_matching:
|
|
83
|
+
self.allAlignedPredictions[seq_id][predictionType].append(None)
|
|
84
|
+
else:
|
|
85
|
+
try:
|
|
86
|
+
current_residue, current_prediction_value, *_other_values = current_prediction_values[predictionType][sequence_residue_index]
|
|
87
|
+
|
|
88
|
+
assert current_residue == current_aligned_residue or current_residue == 'X', f"Amino acid code mismatch in aligned position {sequence_residue_index} (SingleSequence:AlignedSequence) {current_residue}:{current_aligned_residue}"
|
|
89
|
+
|
|
90
|
+
self.allAlignedPredictions[seq_id][predictionType].append(current_prediction_value)
|
|
91
|
+
except ValueError:
|
|
92
|
+
import ipdb; ipdb.set_trace()
|
|
93
|
+
from traceback import print_exc
|
|
94
|
+
print_exc()
|
|
95
|
+
|
|
96
|
+
raise ValueError(
|
|
97
|
+
f"Predicted value of type '{predictionType}' not found for input sequence '{seq_id}'")
|
|
98
|
+
except AssertionError as e:
|
|
99
|
+
print(self.allAlignedPredictions[seq_id])
|
|
100
|
+
raise AssertionError(f"{e} in sequence {seq_id}.\nCurrent aligned residues: {''.join(current_aligned_residues)}\nSingle sequence residues: {''.join([residue for residue, _ in current_prediction_values[predictionType]])}")
|
|
101
|
+
|
|
102
|
+
if residues_matching:
|
|
103
|
+
sequence_residue_index += 1
|
|
104
|
+
|
|
105
|
+
for single_value in [*single_values, *execution_times]:
|
|
106
|
+
valueFloat = current_prediction_values[single_value]
|
|
107
|
+
self.allAlignedPredictions[seq_id][single_value] = valueFloat
|
|
108
|
+
|
|
109
|
+
# self.allAlignedPredictions['sequence'] = sequenceInfo
|
|
110
|
+
self.sequenceInfo = sequenceInfo
|
|
111
|
+
|
|
112
|
+
def filterByRefSeq(self, refSeqId):
|
|
113
|
+
|
|
114
|
+
assert refSeqId in self.allSeqIds, 'Reference sequence ID {} missing in current prediction information!'.format(
|
|
115
|
+
refSeqId)
|
|
116
|
+
|
|
117
|
+
# Here filter so that get back values in reference to the sequence ID that is given.
|
|
118
|
+
|
|
119
|
+
def getDistributions(self):
|
|
120
|
+
# Now generate the info for quartiles, ... based on the alignRefSeqID, first entry in alignment file
|
|
121
|
+
self.alignedPredictionDistribs = {}
|
|
122
|
+
|
|
123
|
+
# Loop over whole alignment
|
|
124
|
+
alignment_length = len(self.seqAlignments[self.allSeqIds[0]])
|
|
125
|
+
|
|
126
|
+
for aligned_residue_index in range(alignment_length):
|
|
127
|
+
for prediction_name in self.prediction_keynames:
|
|
128
|
+
if prediction_name == "viterbi":
|
|
129
|
+
# Skip viterbi prediction
|
|
130
|
+
continue
|
|
131
|
+
|
|
132
|
+
if prediction_name not in self.alignedPredictionDistribs:
|
|
133
|
+
self.alignedPredictionDistribs[prediction_name] = {}
|
|
134
|
+
|
|
135
|
+
all_prediction_values = [aligned_predictions[prediction_name] for aligned_predictions in self.allAlignedPredictions.values()]
|
|
136
|
+
aligned_column_predicted_values = [prediction_values[aligned_residue_index] for prediction_values in all_prediction_values if prediction_values[aligned_residue_index] is not None]
|
|
137
|
+
|
|
138
|
+
# ADRIAN DIAZ: aligned_column_predicted_values can be empty!
|
|
139
|
+
# So, the distribution_info can be a tuple of None values
|
|
140
|
+
distribution_info = self.get_distributions_tuple(aligned_column_predicted_values)
|
|
141
|
+
|
|
142
|
+
for distribution_index, distribution_key in enumerate(DISTRIBUTION_KEYS):
|
|
143
|
+
# import ipdb; ipdb.set_trace()
|
|
144
|
+
if distribution_key not in self.alignedPredictionDistribs[prediction_name]:
|
|
145
|
+
self.alignedPredictionDistribs[prediction_name][distribution_key] = []
|
|
146
|
+
|
|
147
|
+
current_distribution_info = distribution_info[distribution_index]
|
|
148
|
+
self.alignedPredictionDistribs[prediction_name][distribution_key].append(current_distribution_info)
|
|
149
|
+
|
|
150
|
+
self.jsonData = B2bIo.getAllPredictionsJson_msa(self, results=self.alignedPredictionDistribs)
|
|
151
|
+
|
|
152
|
+
return self.jsonData
|
|
153
|
+
|
|
154
|
+
def get_distributions_tuple(self, valueList, outlierConstant=1.5) -> tuple:
|
|
155
|
+
# JR: I put this try-except cause in some MSA we may have only one sequence
|
|
156
|
+
# so the distribution values cannot be calculated
|
|
157
|
+
|
|
158
|
+
if not valueList:
|
|
159
|
+
return (None, None, None, None, None)
|
|
160
|
+
|
|
161
|
+
try:
|
|
162
|
+
median = np.median(valueList)
|
|
163
|
+
upper_quartile = np.percentile(valueList, 75)
|
|
164
|
+
lower_quartile = np.percentile(valueList, 25)
|
|
165
|
+
|
|
166
|
+
IQR = (upper_quartile - lower_quartile) * outlierConstant
|
|
167
|
+
|
|
168
|
+
return (median, upper_quartile, lower_quartile, upper_quartile + IQR, lower_quartile - IQR)
|
|
169
|
+
except (IndexError, ValueError):
|
|
170
|
+
return (None, None, None, None, None)
|
|
171
|
+
|
|
172
|
+
def getGMMScores(self):
|
|
173
|
+
# predictor_names = [
|
|
174
|
+
# *constants.DYNAMINE_PREDICTION_NAMES,
|
|
175
|
+
# *constants.DISOMINE_PREDICTION_NAMES,
|
|
176
|
+
# *constants.EFOLDMINE_PREDICTION_NAMES,
|
|
177
|
+
# *constants.AGMATA_PREDICTION_NAMES,
|
|
178
|
+
# ]
|
|
179
|
+
|
|
180
|
+
# Collect all biophysical predictions for training using median values from distributions
|
|
181
|
+
training_data = []
|
|
182
|
+
alignment_length = len(
|
|
183
|
+
self.alignedPredictionDistribs[self.prediction_keynames[0]]['median']
|
|
184
|
+
)
|
|
185
|
+
|
|
186
|
+
for aln_pos in range(alignment_length):
|
|
187
|
+
# For each alined position
|
|
188
|
+
training_data_current_aligned_position = []
|
|
189
|
+
for pred_type in self.prediction_keynames:
|
|
190
|
+
# For each prediction value
|
|
191
|
+
if pred_type in self.prediction_keynames and pred_type in self.alignedPredictionDistribs:
|
|
192
|
+
value = self.alignedPredictionDistribs[pred_type]['median'][aln_pos]
|
|
193
|
+
|
|
194
|
+
if value is not None and not np.isnan(value):
|
|
195
|
+
training_data_current_aligned_position.append(value)
|
|
196
|
+
|
|
197
|
+
if len(training_data_current_aligned_position) == len(self.prediction_keynames):
|
|
198
|
+
training_data.append(training_data_current_aligned_position)
|
|
199
|
+
|
|
200
|
+
# import ipdb; ipdb.set_trace()
|
|
201
|
+
# Stack the values for training
|
|
202
|
+
X_train = np.vstack(training_data)
|
|
203
|
+
|
|
204
|
+
# Initialize GMM classifier
|
|
205
|
+
gmm_classifier = mixture.GaussianMixture(n_components=1, covariance_type="full", verbose=3, verbose_interval=1)
|
|
206
|
+
|
|
207
|
+
# Fit GMM
|
|
208
|
+
gmm_classifier.fit(X_train)
|
|
209
|
+
|
|
210
|
+
# Calculate scores for each sequence
|
|
211
|
+
self.GMMScores = {}
|
|
212
|
+
for seq_id in self.allSeqIds:
|
|
213
|
+
sequence_gmm_scores = []
|
|
214
|
+
|
|
215
|
+
for aln_pos in range(alignment_length):
|
|
216
|
+
current_position_values = []
|
|
217
|
+
for pred_type in self.prediction_keynames:
|
|
218
|
+
if pred_type in self.allAlignedPredictions[seq_id]:
|
|
219
|
+
value = self.allAlignedPredictions[seq_id][pred_type][aln_pos]
|
|
220
|
+
|
|
221
|
+
if value is not None and not np.isnan(value):
|
|
222
|
+
current_position_values.append(value)
|
|
223
|
+
|
|
224
|
+
if current_position_values:
|
|
225
|
+
# Reshape to match training data format (1, n_features)
|
|
226
|
+
X = np.array(current_position_values).reshape(1, -1)
|
|
227
|
+
scores = gmm_classifier.score_samples(X)
|
|
228
|
+
sequence_gmm_scores.extend(scores.tolist())
|
|
229
|
+
|
|
230
|
+
self.GMMScores[seq_id] = sequence_gmm_scores
|
|
231
|
+
|
|
232
|
+
return self.GMMScores
|
|
233
|
+
|
|
234
|
+
def getCutoffResidues(self):
|
|
235
|
+
"""
|
|
236
|
+
Identifies residues that are over the 95, 99 and 99.9 percentiles as estimated by the GMM using the median of the predictions.
|
|
237
|
+
Stores results in self.cutoffResidues dictionary.
|
|
238
|
+
"""
|
|
239
|
+
if not hasattr(self, 'GMMScores'):
|
|
240
|
+
self.getGMMScores()
|
|
241
|
+
|
|
242
|
+
# Collect all scores to calculate percentiles
|
|
243
|
+
all_scores = []
|
|
244
|
+
for seq_id in self.GMMScores:
|
|
245
|
+
all_scores.extend(self.GMMScores[seq_id])
|
|
246
|
+
|
|
247
|
+
# Calculate percentile cutoffs
|
|
248
|
+
cutoff_95 = np.percentile(all_scores, 95)
|
|
249
|
+
cutoff_99 = np.percentile(all_scores, 99)
|
|
250
|
+
cutoff_99_9 = np.percentile(all_scores, 99.9)
|
|
251
|
+
|
|
252
|
+
# Store cutoff residues for each sequence
|
|
253
|
+
self.cutoffResidues = {}
|
|
254
|
+
for seq_id in self.GMMScores:
|
|
255
|
+
scores = self.GMMScores[seq_id]
|
|
256
|
+
residue_indexes_99_9 = [i for i, score in enumerate(scores) if score > cutoff_99_9]
|
|
257
|
+
residue_indexes_99 = [i for i, score in enumerate(scores) if score > cutoff_99 and i not in residue_indexes_99_9]
|
|
258
|
+
residue_indexes_95 = [i for i, score in enumerate(scores) if score > cutoff_95 and i not in residue_indexes_99 and i not in residue_indexes_99_9]
|
|
259
|
+
|
|
260
|
+
self.cutoffResidues[seq_id] = {
|
|
261
|
+
'res99_9': residue_indexes_99_9,
|
|
262
|
+
'res99': residue_indexes_99,
|
|
263
|
+
'res95': residue_indexes_95,
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
return self.cutoffResidues
|
|
@@ -1,13 +1,15 @@
|
|
|
1
|
-
import
|
|
1
|
+
import argparse
|
|
2
|
+
import os
|
|
3
|
+
import os.path
|
|
2
4
|
import time
|
|
3
5
|
import urllib.parse
|
|
4
6
|
import urllib.request
|
|
5
|
-
|
|
7
|
+
|
|
6
8
|
import pandas as pd
|
|
7
|
-
from Bio import SeqIO
|
|
8
|
-
from Bio.Blast import NCBIWWW, NCBIXML
|
|
9
9
|
from b2bTools.general.Io import B2bIo
|
|
10
10
|
from b2bTools.multipleSeq.Predictor import MineSuiteMSA
|
|
11
|
+
from Bio import SeqIO
|
|
12
|
+
from Bio.Blast import NCBIWWW, NCBIXML
|
|
11
13
|
|
|
12
14
|
###############################################################################
|
|
13
15
|
###############################################################################
|
|
@@ -413,15 +415,16 @@ class predManager:
|
|
|
413
415
|
# Same but now mapped to reference sequence ID in MSA, gaps are None
|
|
414
416
|
self.ms.predictAndMapSeqsFromMSA(msa_file, dataRead=True)
|
|
415
417
|
self.allAlignedPredictions = self.ms.allAlignedPredictions
|
|
418
|
+
self.sequenceInfo = self.ms.sequenceInfo
|
|
416
419
|
|
|
417
420
|
self.jsondata_list = []
|
|
418
421
|
|
|
419
|
-
try:
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
except BaseException:
|
|
424
|
-
|
|
422
|
+
# try:
|
|
423
|
+
# # Create the results folder if it's not there yet
|
|
424
|
+
# if not os.path.exists("/results"):
|
|
425
|
+
# os.mkdir("/results")
|
|
426
|
+
# except BaseException:
|
|
427
|
+
# pass
|
|
425
428
|
|
|
426
429
|
# When we work with an alignment of MSAs
|
|
427
430
|
if msa_map != None:
|
|
@@ -449,6 +452,7 @@ class predManager:
|
|
|
449
452
|
# Same but now mapped to full MSA, gaps are None
|
|
450
453
|
self.ms.predictAndMapSeqsFromMSA(msa_file, dataRead=True)
|
|
451
454
|
self.allAlignedPredictions = self.ms.allAlignedPredictions
|
|
455
|
+
self.sequenceInfo = self.ms.sequenceInfo
|
|
452
456
|
|
|
453
457
|
###############################################################################
|
|
454
458
|
###############################################################################
|