Skip to content
Snippets Groups Projects
Select Git revision
  • a30cd8a40c2078feb0f5edc5a98da19e3885c746
  • main default protected
2 results

monotonic_regression_uncertainty.cpython-39.pyc

Blame
  • core.py 6.52 KiB
    # -*- coding: utf-8 -*-
    
    ########################################################################
    # Author: Nicolas Maillet                                              #
    # Copyright © 2018 Institut Pasteur, Paris.                            #
    # See the COPYRIGHT file for details                                   #
    #                                                                      #
    # This file is part of Rapid Peptide Generator (RPG) software.         #
    #                                                                      #
    # RPG is free software: you can redistribute it and/or modify          #
    # it under the terms of the GNU General Public License as published by #
    # the Free Software Foundation, either version 3 of the License, or    #
    # any later version.                                                   #
    #                                                                      #
    # RPG is distributed in the hope that it will be useful,               #
    # but WITHOUT ANY WARRANTY; without even the implied warranty of       #
    # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the        #
    # GNU General Public License for more details.                         #
    #                                                                      #
    # You should have received a copy of the GNU General Public license    #
    # along with RPG (LICENSE file).                                       #
    # If not, see <http://www.gnu.org/licenses/>.                          #
    ########################################################################
    
    """Contains generic functions and global variables used by RPG"""
    import sys
    
    AMINOACIDS = ["A", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N",
                  "O", "P", "Q", "R", "S", "T", "U", "V", "W", "Y", "B", "X", "Z",
                  "#", "*"]
    """All character accepted in a peptide."""
    
    AA_MASS_AVERAGE = {"*" : 0.0,
                       "A" : 71.0788,
                       "C" : 103.1388,
                       "D" : 115.0886,
                       "E" : 129.1155,
                       "F" : 147.1766,
                       "G" : 57.0519,
                       "H" : 137.1411,
                       "I" : 113.1594,
                       "J" : 113.1594,
                       "K" : 128.1741,
                       "L" : 113.1594,
                       "M" : 131.1926,
                       "N" : 114.1038,
                       "O" : 237.3018,
                       "P" : 97.1167,
                       "Q" : 128.1307,
                       "R" : 156.1875,
                       "S" : 87.0782,
                       "T" : 101.1051,
                       "U" : 150.0388,
                       "V" : 99.1326,
                       "W" : 186.2132,
                       "Y" : 163.1760,
                       "B" : 0.0,
                       "X" : 0.0,
                       "Z" : 0.0,
                       "#" : 0.0}
    """Mass of all amino acids."""
    
    WATER_MASS = 18.01528
    """Mass of a water molecule."""
    
    # Biochemistry Stryer 7th
    #AA_PKA = {"Nterm" : 8.0,
    #          "C" : 8.3,
    #          "D" : 4.1,
    #          "E" : 4.1,
    #          "H" : 6.0,
    #          "K" : 10.8,
    #          "R" : 12.5,
    #          "Y" : 10.9,
    #          "Cterm" : 3.1}
    # IPC_peptide
    AA_PKA = {"Nterm" : 9.564,
              "C" : 8.297,
              "D" : 3.887,
              "E" : 4.317,
              "H" : 6.018,
              "K" : 10.517,
              "R" : 12.503,
              "Y" : 10.071,
              "Cterm" : 2.383}
    """pKa of important amino acid to compute pI."""
    
    def handle_errors(message="", err=1, error_type=""):
        """Custom handling of errors and warnings.
    
        :param message: error message to print
        :param err: Type of message
        :param error_type: header of error to print
        :type message: str
        :type err: int
        :type error_type: str
    
        *Type of message* is:\n
        - **0** for critical error (exit)\n
        - **1** for warning (no exit, default)\n
        - **2** for print in stderr
    
        """
    
        if err == 0:
            print(error_type + "Error: " + message, file=sys.stderr)
            sys.exit(1)
        elif err == 2:
            print(error_type + message, file=sys.stderr)
        else:
            print(error_type + "Warning: " + message, file=sys.stderr)
    
    def get_header(fmt="fasta"):
        """Construct a header for output file in `csv` or `tsv`.
    
        :param fmt: format of header
        :type fmt: str
    
        :return: formatted header
        :rtype: str or None
    
        Informations on the header are:\n
        Original_header No_pep Enzyme Cleav_pos Pep_size Pep_mass pI Seq\n
        No header for `fasta` or other format.
        """
        ret = None
        if fmt == "csv":
            separator = ","
        elif fmt == "tsv":
            separator = "\t"
        if fmt == "csv" or fmt == "tsv":
            ret = "Original_header" + separator + "No_peptide" + separator + \
                  "Enzyme" + separator + "Cleaving_pos" + separator + \
                  "Peptide_size" + separator + "Peptide_mass" + separator + "pI" +\
                  separator + "Sequence"
        return ret
    
    def output_results(output_file, all_seq_digested, fmt, quiet, verbose):
        """Output results of digestion in file and optionally in `stdout`.
    
        :param output_file: the file where to print results
        :param all_seq_digested: results of digestions
        :param fmt: output format (`csv`, `tsv` or `fasta`)
        :param quiet: quiet mode, no `stdout` message
        :param verbose: verbosity level
        :type output_file: str
        :type all_seq_digested: list(list(:py:class:`~rpg.digest.ResultOneDigestion`))
        :type fmt: str
        :type quiet: bool
        :type verbose: int
        """
    
        # Open output file
        try:
            with open(output_file, 'w') as outfile:
                # Header
                header = get_header(fmt)
                # If we have a header to print (csv/tsv)
                if header:
                    # Print it in file
                    outfile.write(header + "\n")
                    # Stdout if small verbose
                    if verbose < 2 and not quiet:
                        print(header)
                # Print all peptides
                for one_seq in all_seq_digested:  # list of list of ResultOneDig
                    # For all ResultOneDigestion
                    for one_enz_res in one_seq:
                        # Print results in file
                        outfile.write(format(one_enz_res, fmt))
                        # Print on stdout
                        if verbose >= 2:
                            # Big verbose
                            print(one_enz_res.get_more_info())
                            if header:
                                print(header)
                        # Default stdout
                        if not quiet:
                            print(format(one_enz_res, fmt), end='')
        except IOError:
            handle_errors(output_file + " can't be open in 'w' mode", 0, "File ")