00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #ifndef OPENMS_ANALYSIS_ID_PROTONDISTRIBUTIONMODEL_H
00037 #define OPENMS_ANALYSIS_ID_PROTONDISTRIBUTIONMODEL_H
00038
00039 #include <OpenMS/CONCEPT/Types.h>
00040 #include <OpenMS/CHEMISTRY/Residue.h>
00041 #include <OpenMS/DATASTRUCTURES/DefaultParamHandler.h>
00042 #include <vector>
00043
00044 namespace OpenMS
00045 {
00046 class AASequence;
00047
00071 class OPENMS_DLLAPI ProtonDistributionModel :
00072 public DefaultParamHandler
00073 {
00074 public:
00075
00079
00080 ProtonDistributionModel();
00081
00083 ProtonDistributionModel(const ProtonDistributionModel & model);
00084
00086 virtual ~ProtonDistributionModel();
00088
00090 ProtonDistributionModel & operator=(const ProtonDistributionModel & pdm);
00091
00095
00096 enum FragmentationType
00097 {
00098 ChargeDirected = 0,
00099 ChargeRemote,
00100 SideChain
00101 };
00103
00112 void getProtonDistribution(std::vector<DoubleReal> & bb_charges, std::vector<DoubleReal> & sc_charges, const AASequence & peptide, Int charge, Residue::ResidueType res_type = Residue::YIon);
00113
00125
00126
00127
00128 void getChargeStateIntensities(const AASequence & peptide, const AASequence & n_term_ion, const AASequence & c_term_ion, Int charge, Residue::ResidueType n_term_type,
00129 std::vector<DoubleReal> & n_term_intensities, std::vector<DoubleReal> & c_term_intensities, FragmentationType type);
00130
00132 void setPeptideProtonDistribution(const std::vector<DoubleReal> & bb_charge, const std::vector<DoubleReal> & sc_charge);
00133
00134 protected:
00135
00136
00137 void calculateProtonDistribution_(const AASequence & peptide, Int charge, Residue::ResidueType res_type = Residue::YIon, bool fixed_proton = false, Size cleavage_site = 0, bool use_most_basic_site = false);
00138
00139 void calculateProtonDistributionCharge1_(const AASequence & peptide, Residue::ResidueType res_type);
00140 void calculateProtonDistributionCharge2_(const AASequence & peptide, Residue::ResidueType res_type, bool fixed_proton, Size cleavage_site, bool use_most_basic_site);
00141 void calculateProtonDistributionGreater2_(const AASequence & peptide, Int charge, Residue::ResidueType res_type);
00142
00143 void calculateProtonDistributionIonPair_(const AASequence & peptide, Residue::ResidueType type, Size cleavage_site);
00144
00145
00146
00147
00148
00149
00150
00151
00152 void calcChargeStateIntensities_(const AASequence & peptide, const AASequence & n_term_ion, const AASequence & c_term_ion, Int charge,
00153 Residue::ResidueType n_term_type, std::vector<DoubleReal> & n_term_intensities, std::vector<DoubleReal> & c_term_intensities, FragmentationType type);
00154
00155
00156 void calcChargeStateIntensities_(const AASequence & peptide, const AASequence & n_term_ion, const AASequence & c_term_ion, Int charge, Residue::ResidueType n_term_type, DoubleReal & n_term1, DoubleReal & c_term1, DoubleReal & n_term2, DoubleReal & c_term2, FragmentationType type);
00157
00158
00159 void getLeftAndRightGBValues_(const AASequence & peptide, DoubleReal & left_gb, DoubleReal & right_gb, Size position);
00160
00161 std::vector<DoubleReal> sc_charge_;
00162 std::vector<DoubleReal> bb_charge_;
00163 std::vector<DoubleReal> sc_charge_full_;
00164 std::vector<DoubleReal> bb_charge_full_;
00165 std::vector<DoubleReal> sc_charge_ion_n_term_;
00166 std::vector<DoubleReal> bb_charge_ion_n_term_;
00167 std::vector<DoubleReal> sc_charge_ion_c_term_;
00168 std::vector<DoubleReal> bb_charge_ion_c_term_;
00169 DoubleReal E_;
00170 DoubleReal E_c_term_;
00171 DoubleReal E_n_term_;
00172
00173 };
00174 }
00175 #endif // OPENMS_ANALYSIS_ID_PROTONDISTRIBUTIONMODEL_H