00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
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
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
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 };
00218 }
00219
00220 #endif // MS_QUANT_HELPER_HPP
00221
00222