diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 1488812..adef8e1 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -6,35 +6,44 @@ on: - 'v*' jobs: - deploy: + publish: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 + - name: Set up Python uses: actions/setup-python@v1 with: python-version: '3.7' + - name: Install dependencies run: | python -m pip install --upgrade pip pip install setuptools wheel twine + + - name: Copy models to GUI directory + run: | + cp -r deeplc/mods deeplc_gui + - name: Zip GUI directory uses: thedoctor0/zip-release@master with: filename: 'deeplc_gui.zip' exclusions: '/*src/*' path: 'deeplc_gui/*' - - name: GitHub Release + + - name: Create GitHub Release uses: docker://antonyurchenko/git-release:v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - DRAFT_RELEASE: "true" + DRAFT_RELEASE: "false" PRE_RELEASE: "false" CHANGELOG_FILE: "CHANGELOG.md" with: args: | deeplc_gui.zip - - name: Build and publish + + - name: Build and publish to PyPI env: TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }} TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }} diff --git a/.github/workflows/python_package_test.yml b/.github/workflows/python_package_test.yml index 29bb995..8c859ab 100644 --- a/.github/workflows/python_package_test.yml +++ b/.github/workflows/python_package_test.yml @@ -3,7 +3,7 @@ name: Python package test on: [push, pull_request] jobs: - build: + test: runs-on: ${{ matrix.os }} strategy: max-parallel: 4 diff --git a/CHANGELOG.md b/CHANGELOG.md index ce47424..171d865 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,28 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [Unreleased] +## [0.1.11] - 2020-02-13 +- Fixes in GUI + +## [0.1.10] - 2020-02-10 +- Include less models in package to meet PyPI 60MB size limitation + +## [0.1.9] - 2020-02-09 +- Bugfix: Pass custom activation function + +## [0.1.8] - 2020-02-07 +- Fixed support for averaging predictions of groups of models (ensemble) when no models were passed +- New models for ensemble + +## [0.1.7] - 2020-02-07 +- Support for averaging predictions of groups of models (ensemble) + +## [0.1.6] - 2020-01-21 +- Fix the latest release + +## [0.1.5] - 2020-01-21 +- Spaces in paths to files and installation allowed +- References to other CompOmics tools removed in GUI ## [0.1.5] - 2020-02-13 - Fixes in GUI diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 787889b..a95f286 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,17 +1,17 @@ # Contributing This document briefly describes how to contribute to -[DeepLC](https://github.com/HUPO-PSI/SpectralLibraryFormat). +[DeepLC](https://github.com/compomics/DeepLC). ## Before you begin If you have an idea for a feature, use case to add or an approach for a bugfix, it is best to communicate with the community by creating an issue in -[GitHub issues](https://github.com/HUPO-PSI/SpectralLibraryFormat/issues). +[GitHub issues](https://github.com/compomics/DeepLC/issues). ## How to contribute -- Fork [DeepLC](https://github.com/HUPO-PSI/SpectralLibraryFormat) on GitHub to +- Fork [DeepLC](https://github.com/compomics/DeepLC) on GitHub to make your changes. - Commit and push your changes to your [fork](https://help.github.com/articles/pushing-to-a-remote/). @@ -28,28 +28,23 @@ with these changes. You pull request message ideally should include: ## Development workflow -- Main development happens on the `master` branch. - - When a new version is ready to be published: - 1. Merge into the `releases` branch. - 2. Change the version number in `setup.py` using + 1. Change the version number in `setup.py` using [semantic versioning](https://semver.org/). - 3. Update the changelog (if not already done) in `CHANGELOG.md` according to + 2. Update the changelog (if not already done) in `CHANGELOG.md` according to [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - 4. Set a new tag with the version number, e.g. `git tag 0.1.1.dev1`. - 5. Push to GitHub, with the tag: `git push; git push --tags`. - 6. Update the version and sha256 checksum in the bioconda recipe using - `conda skeleton pypi deeplc` in the - [bioconda-recipes](https://github.com/bioconda/bioconda-recipes) repository. + 3. Set a new tag with the version number, e.g. `git tag v0.1.5`. + 4. Push to GitHub, with the tag: `git push; git push --tags`. -- When new commits are pushed to the `releases` branch, the following GitHub - Actions are triggered: +- When a new tag is pushed to (or made on) GitHub that matches `v*`, the +following GitHub Actions are triggered: 1. The Python package is build and published to PyPI. 2. A zip archive is made of the `./deeplc_gui/` directory, excluding `./deeplc_gui/src` with [Zip Release](https://github.com/marketplace/actions/zip-release). - 3. A GitHub release is made with the zipped GUI files as asset and the new + 3. A GitHub release is made with the zipped GUI files as assets and the new changes listed in `CHANGELOG.md` with [Git Release](https://github.com/marketplace/actions/git-release). + 4. After some time, the bioconda package should get updated automatically. diff --git a/README.md b/README.md index 0607b0a..57efc98 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,7 @@ DeepLC: Retention time prediction for (modified) peptides using Deep Learning. - [Python module](#python-module) - [Input files](#input-files) - [Prediction models](#prediction-models) +- [Q&A](#qa) --- @@ -145,3 +146,117 @@ settings: By default, DeepLC selects the best model based on the calibration dataset. If no calibration is performed, the first default model is selected. Always keep note of the used models and the DeepLC version. + +## Q&A + +**__Q: So DeepLC is able to predict the retention time for any modification?__** + +Yes, DeepLC can predict the retention time of any modification. However, if the +modification is **very** different from the peptides the model has seen during +training the accuracy might not be satisfactory for you. For example, if the model +has never seen a phosphor atom before, the accuracy of the prediction is going to +be low. + +**__Q: Installation fails. Why?__** + +Please make sure to install DeepLC in a path that does not contain spaces. Run +the latest LTS version of Ubuntu or Windows 10. Make sure you have enough disk +space available, surprisingly TensorFlow needs quite a bit of disk space. If +you are still not able to install DeepLC, please feel free to contact us: + +Robbin.Bouwmeester@ugent.be and Ralf.Gabriels@ugent.be + +**__Q: I have a special usecase that is not supported. Can you help?__** + +Ofcourse, please feel free to contact us: + +Robbin.Bouwmeester@ugent.be and Ralf.Gabriels@ugent.be + +**__Q: DeepLC runs out of memory. What can I do?__** + +You can try to reduce the batch size. DeepLC should be able to run if the batch size is low +enough, even on machines with only 4 GB of RAM. + +**__Q: I have a graphics card, but DeepLC is not using the GPU. Why?__** + +For now DeepLC defaults to the CPU instead of the GPU. Clearly, because you want +to use the GPU, you are a power user :-). If you want to make the most of that expensive +GPU, you need to change or remove the following line (at the top) in __deeplc.py__: + +``` +# Set to force CPU calculations +os.environ['CUDA_VISIBLE_DEVICES'] = '-1' +``` + +Also change the same line in the function __reset_keras()__: + +``` +# Set to force CPU calculations +os.environ['CUDA_VISIBLE_DEVICES'] = '-1' +``` + +Either remove the line or change to (where the number indicates the number of GPUs): + +``` +# Set to force CPU calculations +os.environ['CUDA_VISIBLE_DEVICES'] = '1' +``` + +**__Q: What modification name should I use?__** + +The names from unimod are used. The PSI-MS name is used by default, but the Interim name +is used as a fall-back if the PSI-MS name is not available. Please also see __unimod_to_formula.csv__ +in the folder __unimod/__ for the naming of specific modifications. + +**__Q: I have a modification that is not in unimod. How can I add the modification?__** + +In the folder __unimod/__ there is the file __unimod_to_formula.csv__ that can be used to +add modifications. In the CSV file add a name (**that is unique and not present yet**) and +the change in atomic composition. For example: + +``` +Met->Hse,O,H(-2) C(-1) S(-1) +``` + +Make sure to use negative signs for the atoms subtracted. + +**__Q: Help, all my predictions are between [0,10]. Why?__** + +It is likely you did not use calibration. No problem, but the retention times for training +purposes were normalized between [0,10]. This means that you probably need to adjust the +retention time yourselve after analysis or use a calibration set as the input. + +**__Q: How does the ensemble part of DeepLC work?__** + +Models within the same directory are grouped if they overlap in their name. The overlap +has to be in their full name, except for the last part of the name after a "_"-character. + +The following models will be grouped: + +``` +full_hc_dia_fixed_mods_a.hdf5 +full_hc_dia_fixed_mods_b.hdf5 +``` + +None of the following models will not be grouped: + +``` +full_hc_dia_fixed_mods2_a.hdf5 +full_hc_dia_fixed_mods_b.hdf5 +full_hc_dia_fixed_mods_2_b.hdf5 +``` + +**__Q: I would like to take the ensemble average of multiple models, even if they are trained on different datasets. How can I do this?__** + +Feel free to experiment! Models within the same directory are grouped if they overlap in +their name. The overlap has to be in their full name, except for the last part of the +name after a "_"-character. + +The following models will be grouped: + +``` +model_dataset1.hdf5 +model_dataset2.hdf5 +``` + +So you just need to rename you models. diff --git a/deeplc/__main__.py b/deeplc/__main__.py index 419bde5..84dd1fc 100644 --- a/deeplc/__main__.py +++ b/deeplc/__main__.py @@ -1,7 +1,12 @@ """ Code used to run the retention time predictor """ + +__author__ = ["Robbin Bouwmeester", "Ralf Gabriels"] +__credits__ = ["Robbin Bouwmeester", "Ralf Gabriels", "Prof. Lennart Martens", "Sven Degroeve"] __license__ = "Apache License, Version 2.0" +__maintainer__ = ["Robbin Bouwmeester", "Ralf Gabriels"] +__email__ = ["Robbin.Bouwmeester@ugent.be", "Ralf.Gabriels@ugent.be"] # Standard library from collections import Counter @@ -220,12 +225,29 @@ def run(file_pred="", logging.info("Using DeepLC version %s", __version__) + if len(file_cal) == 0 and file_model != None: + fm_dict = {} + sel_group = "" + for fm in file_model: + if len(sel_group) == 0: + sel_group = "_".join(fm.split("_")[:-1]) + fm_dict[sel_group]= fm + continue + m_group = "_".join(fm.split("_")[:-1]) + if m_group == sel_group: + fm_dict[m_group] = fm + file_model = fm_dict + # Read input files df_pred = pd.read_csv(file_pred) + if len(df_pred.columns) < 2: + df_pred = pd.read_csv(file_pred,sep=" ") df_pred = df_pred.fillna("") if len(file_cal) > 1: df_cal = pd.read_csv(file_cal) + if len(df_cal.columns) < 2: + df_cal = pd.read_csv(df_cal,sep=" ") df_cal = df_cal.fillna("") # Make a feature extraction object; you can skip this if you do not want to diff --git a/deeplc/deeplc.py b/deeplc/deeplc.py index 9343d14..c373be5 100644 --- a/deeplc/deeplc.py +++ b/deeplc/deeplc.py @@ -5,12 +5,11 @@ For the library versions see the .yml file """ -__author__ = "Robbin Bouwmeester" -__copyright__ = "Copyright 2019" -__credits__ = ["Robbin Bouwmeester", "Prof. Lennart Martens", "Sven Degroeve"] +__author__ = ["Robbin Bouwmeester", "Ralf Gabriels"] +__credits__ = ["Robbin Bouwmeester", "Ralf Gabriels", "Prof. Lennart Martens", "Sven Degroeve"] __license__ = "Apache License, Version 2.0" -__maintainer__ = "Robbin Bouwmeester" -__email__ = "Robbin.Bouwmeester@ugent.be" +__maintainer__ = ["Robbin Bouwmeester", "Ralf Gabriels"] +__email__ = ["Robbin.Bouwmeester@ugent.be", "Ralf.Gabriels@ugent.be"] # Default models, will be used if no other is specified. If no best model is @@ -18,10 +17,9 @@ import os deeplc_dir = os.path.dirname(os.path.realpath(__file__)) DEFAULT_MODELS = [ - "mods/full_hc_dia_fixed_mods.hdf5", - "mods/full_hc_LUNA_HILIC_fixed_mods.hdf5", - "mods/full_hc_LUNA_SILICA_fixed_mods.hdf5", - "mods/full_hc_PXD000954_fixed_mods.hdf5", + "mods/full_hc_dia_fixed_mods_1fd8363d9af9dcad3be7553c39396960.hdf5", + "mods/full_hc_dia_fixed_mods_cb975cfdd4105f97efa0b3afffe075cc.hdf5", + "mods/full_hc_dia_fixed_mods_8c22d89667368f2f02ad996469ba157e.hdf5" ] DEFAULT_MODELS = [os.path.join(deeplc_dir, dm) for dm in DEFAULT_MODELS] @@ -49,6 +47,9 @@ from tensorflow.keras.models import load_model +# "Costum" activation function +lrelu = lambda x: tf.keras.activations.relu(x, alpha=0.1, max_value=20.0) + try: from tensorflow.compat.v1.keras.backend import set_session except ImportError: from tensorflow.keras.backend import set_session try: from tensorflow.compat.v1.keras.backend import clear_session @@ -275,6 +276,33 @@ def do_f_extraction_pd_parallel(self, pool.join() return df + def calibration_core(self,uncal_preds,cal_dict,cal_min,cal_max): + cal_preds = [] + for uncal_pred in uncal_preds: + try: + slope, intercept, x_correction = cal_dict[str( + round(uncal_pred, self.bin_dist))] + cal_preds.append( + slope * (uncal_pred - x_correction) + intercept) + except KeyError: + # outside of the prediction range ... use the last + # calibration curve + if uncal_pred <= cal_min: + slope, intercept, x_correction = cal_dict[str( + round(cal_min, self.bin_dist))] + cal_preds.append( + slope * (uncal_pred - x_correction) + intercept) + elif uncal_pred >= cal_max: + slope, intercept, x_correction = cal_dict[str( + round(cal_max, self.bin_dist))] + cal_preds.append( + slope * (uncal_pred - x_correction) + intercept) + else: + slope, intercept, x_correction = cal_dict[str( + round(cal_max, self.bin_dist))] + cal_preds.append( + slope * (uncal_pred - x_correction) + intercept) + return np.array(cal_preds) def make_preds_core(self, seq_df=None, @@ -374,45 +402,39 @@ def make_preds_core(self, if self.verbose: logging.debug("Predicting with calibration...") - cal_preds = [] + # Load the model differently if we are going to use a CNN if self.cnn_model: - if not mod_name: - mod = load_model(self.model) + # TODO this is madness! Only allow dicts to come through this function... + if isinstance(self.model, dict): + ret_preds = [] + for m_group_name,m_name in self.model.items(): + mod = load_model(m_name, + custom_objects = {'': lrelu}) + uncal_preds = mod.predict( + [X, X_sum, X_global, X_hc], batch_size=5120).flatten() / correction_factor + + p = list(self.calibration_core(uncal_preds,self.calibrate_dict[m_name],self.calibrate_min[m_name],self.calibrate_max[m_name])) + ret_preds.append(p) + ret_preds = np.array([sum(a)/len(a) for a in zip(*ret_preds)]) + elif not mod_name: + mod = load_model(self.model, + custom_objects = {'': lrelu}) + uncal_preds = mod.predict( + [X, X_sum, X_global, X_hc], batch_size=5120).flatten() / correction_factor + ret_preds = self.calibration_core(uncal_preds,self.calibrate_dict,self.calibrate_min,self.calibrate_max) else: - mod = load_model(mod_name) - uncal_preds = mod.predict( - [X, X_sum, X_global, X_hc], batch_size=5120).flatten() / correction_factor + mod = load_model(mod_name, + custom_objects = {'': lrelu}) + uncal_preds = mod.predict( + [X, X_sum, X_global, X_hc], batch_size=5120).flatten() / correction_factor + ret_preds = self.calibration_core(uncal_preds,self.calibrate_dict,self.calibrate_min,self.calibrate_max) else: # first get uncalibrated prediction uncal_preds = self.model.predict(X) / correction_factor - for uncal_pred in uncal_preds: - try: - slope, intercept, x_correction = self.calibrate_dict[str( - round(uncal_pred, self.bin_dist))] - cal_preds.append( - slope * (uncal_pred - x_correction) + intercept) - except KeyError: - # outside of the prediction range ... use the last - # calibration curve - if uncal_pred <= self.calibrate_min: - slope, intercept, x_correction = self.calibrate_dict[str( - round(self.calibrate_min, self.bin_dist))] - cal_preds.append( - slope * (uncal_pred - x_correction) + intercept) - elif uncal_pred >= self.calibrate_max: - slope, intercept, x_correction = self.calibrate_dict[str( - round(self.calibrate_max, self.bin_dist))] - cal_preds.append( - slope * (uncal_pred - x_correction) + intercept) - else: - slope, intercept, x_correction = self.calibrate_dict[str( - round(self.calibrate_max, self.bin_dist))] - cal_preds.append( - slope * (uncal_pred - x_correction) + intercept) - ret_preds = np.array(cal_preds) + else: if self.verbose: logging.debug("Predicting without calibration...") @@ -420,20 +442,47 @@ def make_preds_core(self, # Load the model differently if we use CNN if self.cnn_model: if not mod_name: - if isinstance(self.model, list): + if isinstance(self.model, dict): + ret_preds = [] + for m_group_name,m_name in self.model.items(): + mod = load_model(m_name, + custom_objects = {'': lrelu}) + p = mod.predict( + [X, X_sum, X_global, X_hc], batch_size=5120).flatten() / correction_factor + ret_preds.append(p) + ret_preds = np.array([sum(a)/len(a) for a in zip(*ret_preds)]) + elif isinstance(self.model, list): mod_name = self.model[0] + mod = load_model(mod_name, + custom_objects = {'': lrelu}) + ret_preds = mod.predict([X, + X_sum, + X_global, + X_hc], + batch_size=5120, + verbose=cnn_verbose).flatten() / correction_factor elif isinstance(self.model, str): mod_name = self.model + mod = load_model(mod_name, + custom_objects = {'': lrelu}) + ret_preds = mod.predict([X, + X_sum, + X_global, + X_hc], + batch_size=5120, + verbose=cnn_verbose).flatten() / correction_factor else: logging.critical('No CNN model defined.') exit(1) - mod = load_model(mod_name) - ret_preds = mod.predict([X, - X_sum, - X_global, - X_hc], - batch_size=5120, - verbose=cnn_verbose).flatten() / correction_factor + else: + mod = load_model(mod_name, + custom_objects = {'': lrelu}) + ret_preds = mod.predict([X, + X_sum, + X_global, + X_hc], + batch_size=5120, + verbose=cnn_verbose).flatten() / correction_factor else: ret_preds = self.model.predict(X) / correction_factor @@ -711,7 +760,12 @@ def calibrate_preds(self, best_calibrate_min = 0.0 best_calibrate_max = 0.0 best_calibrate_dict = {} - best_model = "" + mod_calibrate_dict = {} + mod_calibrate_min_dict = {} + mod_calibrate_max_dict = {} + pred_dict = {} + mod_dict = {} + best_models = [] for m in self.model: if self.verbose: @@ -738,7 +792,30 @@ def calibrate_preds(self, seq_df=seq_df, correction_factor=correction_factor, mod_name=m) - + m_name = m.split("/")[-1] + m_group_name = "_".join(m_name.split("_")[:-1]) + + try: + pred_dict[m_group_name][m] = preds + mod_dict[m_group_name][m] = m + mod_calibrate_dict[m_group_name][m] = self.calibrate_dict + mod_calibrate_min_dict[m_group_name][m] = self.calibrate_min + mod_calibrate_max_dict[m_group_name][m] = self.calibrate_max + except: + pred_dict[m_group_name] = {} + mod_dict[m_group_name] = {} + mod_calibrate_dict[m_group_name] = {} + mod_calibrate_min_dict[m_group_name] = {} + mod_calibrate_max_dict[m_group_name] = {} + + pred_dict[m_group_name][m] = preds + mod_dict[m_group_name][m] = m + mod_calibrate_dict[m_group_name][m] = self.calibrate_dict + mod_calibrate_min_dict[m_group_name][m] = self.calibrate_min + mod_calibrate_max_dict[m_group_name][m] = self.calibrate_max + + for m_name in pred_dict.keys(): + preds = [sum(a)/len(a) for a in zip(*list(pred_dict[m_name].values()))] if len(measured_tr) == 0: perf = sum(abs(seq_df["tr"] - preds)) else: @@ -750,12 +827,14 @@ def calibrate_preds(self, (perf / len(preds))) if perf < best_perf: + m_group_name = "_".join(m.split("_")[:-1]).split("/")[-1] # TODO is deepcopy really required? - best_calibrate_dict = copy.deepcopy(self.calibrate_dict) - best_calibrate_min = copy.deepcopy(self.calibrate_min) - best_calibrate_max = copy.deepcopy(self.calibrate_max) - best_model = copy.deepcopy(m) + best_calibrate_dict = copy.deepcopy(mod_calibrate_dict[m_group_name]) + best_calibrate_min = copy.deepcopy(mod_calibrate_min_dict[m_group_name]) + best_calibrate_max = copy.deepcopy(mod_calibrate_max_dict[m_group_name]) + + best_model = copy.deepcopy(mod_dict[m_group_name]) best_perf = perf self.calibrate_dict = best_calibrate_dict diff --git a/deeplc/deeplc_fit_model.py b/deeplc/deeplc_fit_model.py index ad090ff..7219d8c 100644 --- a/deeplc/deeplc_fit_model.py +++ b/deeplc/deeplc_fit_model.py @@ -5,13 +5,11 @@ For the library versions see the .yml file """ -__author__ = "Robbin Bouwmeester" -__copyright__ = "Copyright 2019" -__credits__ = ["Robbin Bouwmeester", "Prof. Lennart Martens", "Sven Degroeve"] +__author__ = ["Robbin Bouwmeester", "Ralf Gabriels"] +__credits__ = ["Robbin Bouwmeester", "Ralf Gabriels", "Prof. Lennart Martens", "Sven Degroeve"] __license__ = "Apache License, Version 2.0" -__version__ = "1.0" -__maintainer__ = "Robbin Bouwmeester" -__email__ = "Robbin.Bouwmeester@ugent.be" +__maintainer__ = ["Robbin Bouwmeester", "Ralf Gabriels"] +__email__ = ["Robbin.Bouwmeester@ugent.be", "Ralf.Gabriels@ugent.be"] # Native imports from configparser import ConfigParser diff --git a/deeplc/feat_extractor.py b/deeplc/feat_extractor.py index ecd753c..69f42b2 100644 --- a/deeplc/feat_extractor.py +++ b/deeplc/feat_extractor.py @@ -5,12 +5,11 @@ For the library versions see the .yml file """ -__author__ = "Robbin Bouwmeester" -__copyright__ = "Copyright 2019" -__credits__ = ["Robbin Bouwmeester", "Prof. Lennart Martens", "Sven Degroeve"] +__author__ = ["Robbin Bouwmeester", "Ralf Gabriels"] +__credits__ = ["Robbin Bouwmeester", "Ralf Gabriels", "Prof. Lennart Martens", "Sven Degroeve"] __license__ = "Apache License, Version 2.0" -__maintainer__ = "Robbin Bouwmeester" -__email__ = "Robbin.Bouwmeester@ugent.be" +__maintainer__ = ["Robbin Bouwmeester", "Ralf Gabriels"] +__email__ = ["Robbin.Bouwmeester@ugent.be", "Ralf.Gabriels@ugent.be"] # Native imports import os diff --git a/deeplc/mods/full_hc_LUNA_HILIC_fixed_mods.hdf5 b/deeplc/mods/full_hc_LUNA_HILIC_fixed_mods.hdf5 deleted file mode 100644 index e3940aa..0000000 Binary files a/deeplc/mods/full_hc_LUNA_HILIC_fixed_mods.hdf5 and /dev/null differ diff --git a/deeplc/mods/full_hc_LUNA_HILIC_fixed_mods_cb975cfdd4105f97efa0b3afffe075cc.hdf5 b/deeplc/mods/full_hc_LUNA_HILIC_fixed_mods_cb975cfdd4105f97efa0b3afffe075cc.hdf5 new file mode 100644 index 0000000..34f8ab0 Binary files /dev/null and b/deeplc/mods/full_hc_LUNA_HILIC_fixed_mods_cb975cfdd4105f97efa0b3afffe075cc.hdf5 differ diff --git a/deeplc/mods/full_hc_LUNA_SILICA_fixed_mods.hdf5 b/deeplc/mods/full_hc_LUNA_SILICA_fixed_mods.hdf5 deleted file mode 100644 index 0c0d23b..0000000 Binary files a/deeplc/mods/full_hc_LUNA_SILICA_fixed_mods.hdf5 and /dev/null differ diff --git a/deeplc/mods/full_hc_PXD000954_fixed_mods.hdf5 b/deeplc/mods/full_hc_PXD000954_fixed_mods.hdf5 deleted file mode 100644 index ad549b8..0000000 Binary files a/deeplc/mods/full_hc_PXD000954_fixed_mods.hdf5 and /dev/null differ diff --git a/deeplc/mods/full_hc_dia_fixed_mods.hdf5 b/deeplc/mods/full_hc_dia_fixed_mods.hdf5 deleted file mode 100644 index e439b45..0000000 Binary files a/deeplc/mods/full_hc_dia_fixed_mods.hdf5 and /dev/null differ diff --git a/deeplc/mods/full_hc_dia_fixed_mods_1fd8363d9af9dcad3be7553c39396960.hdf5 b/deeplc/mods/full_hc_dia_fixed_mods_1fd8363d9af9dcad3be7553c39396960.hdf5 new file mode 100644 index 0000000..0dfa0c8 Binary files /dev/null and b/deeplc/mods/full_hc_dia_fixed_mods_1fd8363d9af9dcad3be7553c39396960.hdf5 differ diff --git a/deeplc/mods/full_hc_dia_fixed_mods_8c22d89667368f2f02ad996469ba157e.hdf5 b/deeplc/mods/full_hc_dia_fixed_mods_8c22d89667368f2f02ad996469ba157e.hdf5 new file mode 100644 index 0000000..2572d12 Binary files /dev/null and b/deeplc/mods/full_hc_dia_fixed_mods_8c22d89667368f2f02ad996469ba157e.hdf5 differ diff --git a/deeplc/mods/full_hc_dia_fixed_mods_cb975cfdd4105f97efa0b3afffe075cc.hdf5 b/deeplc/mods/full_hc_dia_fixed_mods_cb975cfdd4105f97efa0b3afffe075cc.hdf5 new file mode 100644 index 0000000..d2d7750 Binary files /dev/null and b/deeplc/mods/full_hc_dia_fixed_mods_cb975cfdd4105f97efa0b3afffe075cc.hdf5 differ diff --git a/deeplc_gui/update_DeepLC.bat b/deeplc_gui/update_DeepLC.bat new file mode 100644 index 0000000..7364f4f --- /dev/null +++ b/deeplc_gui/update_DeepLC.bat @@ -0,0 +1 @@ +call Miniconda3/Scripts/activate.bat deeplc_gui & conda update deeplc & pause \ No newline at end of file diff --git a/examples/deeplc_example.py b/examples/deeplc_example.py index 3d9646c..662e901 100644 --- a/examples/deeplc_example.py +++ b/examples/deeplc_example.py @@ -33,7 +33,7 @@ ) # Initiate a DeepLC instance that will perform the calibration and predictions dlc = DeepLC( - path_model="deeplc/mods/full_hc_dia_fixed_mods.hdf5", + path_model=["deeplc/mods/full_hc_dia_fixed_mods_a.hdf5","deeplc/mods/full_hc_dia_fixed_mods_b.hdf5"], cnn_model=True, f_extractor=f_extractor, verbose=False diff --git a/setup.py b/setup.py index 4a807ff..860e04b 100644 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ setup( name='deeplc', - version='0.1.5', + version='0.1.11', license='apache-2.0', description='DeepLC: Retention time prediction for (modified) peptides using Deep Learning.', long_description=LONG_DESCRIPTION,