Matrix Science header

ms_quant_helper.hpp

00001 /*
00002 ##############################################################################
00003 # file: ms_quant_helper.hpp                                                  #
00004 # 'msparser' toolkit                                                         #
00005 # Helper routines for peptide and protein quantitation                       #
00006 ##############################################################################
00007 # COPYRIGHT NOTICE                                                           #
00008 # Copyright 1998-2013 Matrix Science Limited  All Rights Reserved.           #
00009 #                                                                            #
00010 ##############################################################################
00011 #     $Author: patricke@matrixscience.com $ #
00012 #       $Date: 2021-03-02 14:20:52 +0000 $ #
00013 #   $Revision: ead0a29935c733285496344df275096149f36406 | MSPARSER_REL_2_8_1-0-gea32989045 $ #
00014 # $NoKeywords::                                                            $ #
00015 ##############################################################################
00016 */
00017 
00018 #ifndef MS_QUANT_HELPER_HPP
00019 #define MS_QUANT_HELPER_HPP
00020 
00021 
00022 #include <string>
00023 #include <vector>
00024 #include <list>
00025 
00026 namespace msparser_internal {
00027     typedef std::pair<char, int> modification_site_t;
00028     typedef std::vector<modification_site_t> modification_sites_t;
00029     typedef std::map<std::string, char> varmod_title_map_t;
00030 }
00031 
00032 namespace matrix_science {
00033     class ms_quant_method;
00034     class ms_quant_localdef;
00035     class ms_quant_unmodified;
00036     class ms_peptide;
00037     class ms_peptidesummary;
00038     class ms_protein;
00039     class ms_ms1quant_match;
00040 
00046 
00047 
00049     class MS_MASCOTRESFILE_API ms_quant_helper: public ms_errors
00050     {
00051         public:
00053             enum PEPTIDE_QUANTIFIABILITY {
00054                 PEPTIDE_IS_QUANTIFIABLE             = 0x0000, 
00055                 PEPTIDE_HAS_NO_REQUIRED_FIXEDMOD    = 0x0001, 
00056                 PEPTIDE_HAS_NO_REQUIRED_VARMOD      = 0x0002, 
00057                 PEPTIDE_HAS_EXCLUDED_FIXEDMOD       = 0x0010, 
00058                 PEPTIDE_HAS_EXCLUDED_LOCAL_FIXEDMOD = 0x0011, 
00059                 PEPTIDE_HAS_EXCLUDED_VARMOD         = 0x0012, 
00060                 PEPTIDE_HAS_UNMODIFIED_SITE         = 0x0013, 
00061                 PEPTIDE_HAS_EXCLUDED_LOCAL_VARMOD   = 0x0014, 
00062                 PEPTIDE_HAS_NO_EXCLUSIVE_MODS       = 0x0015, 
00063 
00064                 PEPTIDE_QUANTIFIABILITY_UNAVAILABLE = 0xf000 
00065             };
00066 
00068             enum PEPTIDE_QUALITY {
00069                 PEPTIDE_QUALITY_IS_OK                  = 0x0000, 
00070                 PEPTIDE_CHARGE_BELOW_PRECURSOR_MIN     = 0x0001, 
00071                 PEPTIDE_SCORE_BELOW_SCORE_THR          = 0x0002, 
00072                 PEPTIDE_EXPECT_ABOVE_THRESHOLD         = 0x0003, 
00073                 PEPTIDE_SCORE_BELOW_IDENTITY_THR       = 0x0004, 
00074                 PEPTIDE_SCORE_BELOW_IDENTITY_THR_NOHOM = 0x0005, 
00075                 PEPTIDE_SCORE_BELOW_HOMOLOGY_THR       = 0x0006, 
00076                 PEPTIDE_NOT_UNIQUE                     = 0x0007, 
00077 
00078                 PEPTIDE_QUALITY_UNAVAILABLE            = 0xf000 
00079             };
00080 
00082             ms_quant_helper(const ms_peptidesummary &pepsum, const ms_quant_method &qm, const ms_umod_configfile &umodfile);
00083 
00085             ~ms_quant_helper();
00086 
00087             const ms_peptidesummary & getSummary() const;
00088             const ms_quant_method & getMethod() const;
00089 #ifndef SWIG
00090 
00091             int isPeptideQuantifiable(int q, int p, const ms_protein *protein, int peptideIndex, std::string & reasonStrRef) const;
00092 
00094             int isPeptideQualityOK(int q, int p, std::string & reasonStrRef) const;
00095 #else // SWIG Multiple return values
00096             int isPeptideQuantifiable(int q, int p, const ms_protein *protein, int peptideIndex, std::string & OUTPUT) const;
00097             int isPeptideQualityOK(int q, int p, std::string & OUTPUT) const;
00098 #endif
00099 
00100             int testProteinTerminusExclusion(int q, int p, const ms_protein *, int peptideIndex, std::string & reason) const;
00101 
00103             int createMissingComponents(matrix_science::ms_ms1quant_match * match) const;
00104 
00105             matrix_science::ms_ms1quant_peptide_status::peptideStatus group_peptide(
00106                     const matrix_science::ms_protein & hit,
00107                     int iPeptide,
00108                     matrix_science::ms_peptide *& peptide,
00109                     matrix_science::ms_quant_component & component,
00110                     matrix_science::ms_quant_helper::PEPTIDE_QUANTIFIABILITY * quantifiabilityStatus = 0,
00111                     matrix_science::ms_quant_helper::PEPTIDE_QUALITY * qualityStatus = 0,
00112                     matrix_science::ms_mascotresults::QUANT_COMPONENT_STATUS * componentStatus = 0,
00113                     std::string * reason = 0 ) const;
00114 
00115             matrix_science::ms_ms1quant_peptide_status::peptideStatus group_peptide(
00116                     const matrix_science::ms_peptide & peptide,
00117                     matrix_science::ms_quant_component & component,
00118                     matrix_science::ms_quant_helper::PEPTIDE_QUANTIFIABILITY * quantifiabilityStatus = 0,
00119                     matrix_science::ms_quant_helper::PEPTIDE_QUALITY * qualityStatus = 0,
00120                     matrix_science::ms_mascotresults::QUANT_COMPONENT_STATUS * componentStatus = 0,
00121                     std::string * reason = 0,
00122                     const matrix_science::ms_protein * hit = 0,
00123                     int iPeptide = 0
00124                      ) const;
00125 
00126         private:
00127             // No copying.
00128             ms_quant_helper(const ms_quant_helper& src);
00129             ms_quant_helper& operator=(const ms_quant_helper& right);
00130 
00131             void applyComponentMods(
00132                     std::string * newVarMods,
00133                     std::string * newSummedMods,
00134                     const matrix_science::ms_quant_component & targetComponent,
00135                     const std::string & pepStr,
00136                     const std::string & labelFreeVarMods,
00137                     bool isProteinNterm,
00138                     bool isProteinCterm
00139                     ) const;
00140 
00141             void applyComponentMods(
00142                 std::string * newVarMods,
00143                 std::string * newSummedMods,
00144                 const matrix_science::ms_quant_component & targetComponent,
00145                 const matrix_science::ms_quant_component & sourceComponent,
00146                 const std::string & pepStr,
00147                 const std::string & labelFreeVarMods,
00148                 const std::string & sourceVarMods,
00149                 const std::string & sourceSummedMods,
00150                 bool isProteinNterm,
00151                 bool isProteinCterm
00152             ) const;
00153 
00154             char ModLetter(const std::string & modName) const;
00155 
00156             const ms_peptidesummary &pepsum_;
00157             const ms_quant_method &method_;
00158             const ms_umod_configfile & umodfile_;
00159 
00160             std::map<char, std::string> varModTitles_;
00161             std::map<char, std::string> fixedModTitles_;
00162 
00163             bool haveRequiredMods_;
00164             std::string sortedRequiredFixedMods_;
00165             std::string sortedRequiredVarMods_;
00166 
00167             bool haveExclusions_;
00168             bool haveProteinTerminusTest_;
00169 
00170             bool initRequiredMods(const ms_quant_modgroup *modgroup, const ms_umod_configfile &umodfile, const msparser_internal::varmod_title_map_t &varmod_title_map, std::set<char> &requiredFixedMods, std::set<char> &requiredVarMods);
00171             bool initFixedExclusion(const ms_quant_modgroup *modgroup, const ms_umod_configfile &umodfile);
00172 
00173             int testRequiredMods(const std::string &peptide_str, const std::string &varmods_str, std::string & reason) const;
00174             
00175             int testFixedExclusions(const std::string &peptide_str, const std::string &varmods_str, const ms_protein *protein, int peptideIndex, std::string & reason) const;
00176             int testVariableExclusions(const std::string &peptide_str, const std::string &varmods_str, const ms_protein *protein, int peptideIndex, std::string & reason) const;
00177 
00178             bool requireUniquePeptide_;
00179             int minPrecursorCharge_;
00180             double ionsScoreThreshold_;
00181             double expectationValueThreshold_;
00182             bool mustPassIdentityThreshold_;
00183             bool mustPassHomologyThreshold_;
00184             bool isAverageProtocol_;
00185 
00186 //Warning 325: Nested struct not currently supported
00187 #ifndef SWIG
00188             typedef struct {
00189                 int why;
00190                 std::string fmt;
00191                 msparser_internal::modification_sites_t modsites;
00192             } fixed_exclusion_t;
00193 
00194             typedef struct {
00195                 int why;
00196                 std::string fmt;
00197                 char varmod_id;
00198                 msparser_internal::modification_sites_t modsites;
00199             } variable_exclusion_t;
00200 
00201             std::list<fixed_exclusion_t> fixedExclusions_;
00202             std::list<variable_exclusion_t> variableExclusions_;
00203 
00204             std::list< std::list<variable_exclusion_t> > qualityExclusions_;
00205 
00206             bool initVariableExclusion(const ms_quant_modgroup *modgroup, const ms_umod_configfile &umodfile, const msparser_internal::varmod_title_map_t &varmod_title_map, std::list<variable_exclusion_t> &variableExclusions);
00207 #endif
00208             
00209             bool peptideFitsExclusiveGroup(const std::string &peptide_str, const std::string &varmods_str) const;
00210             bool peptideFitsExclusiveGroupMods(const std::string &peptide_str, const std::string &varmods_str, const std::list<variable_exclusion_t> &qualityExclusions) const;
00211 
00212             static bool mod_can_be_fixed(char site, int position);
00213             static bool excluded_due_to_fixed_mod(const std::string &peptide_str, char site, int position);
00214             static bool excluded_due_to_variable_mod(const std::string &peptide_str, const std::string &varmods_str, char site, int position, char varmod_id, const ms_protein *protein, int peptideIndex);
00215 
00216     }; // end of quantitation_group
00218 }   // matrix_science namespace
00219 
00220 #endif // MS_QUANT_HELPER_HPP
00221 
00222 /*------------------------------- End of File -------------------------------*/

Copyright © 2022 Matrix Science Ltd.  All Rights Reserved. Generated on Thu Mar 31 2022 01:12:29