OpenMS
Loading...
Searching...
No Matches
ProSEAlgorithm.h
Go to the documentation of this file.
1// Copyright (c) 2002-present, The OpenMS Team -- EKU Tuebingen, ETH Zurich, and FU Berlin
2// SPDX-License-Identifier: BSD-3-Clause
3//
4// --------------------------------------------------------------------------
5// $Maintainer: $
6// $Authors: Raphael Förster $
7// --------------------------------------------------------------------------
8
9#pragma once
10
13
22
23#include <algorithm> // std::min (used by inline computeModMatchTolerance_)
24#include <functional> // std::hash (ProteinMapping_), std::function (FileResultConsumer, loadSpectra)
25#include <iosfwd> // std::ostream (renderRunSummary / renderModificationSummary)
26#include <limits>
27#include <map>
28#include <memory> // std::shared_ptr (released_hits_)
29#include <string> // std::string (renderRunSummaryJson return / manifest)
30#include <string_view>
31#include <unordered_map>
32#include <unordered_set>
33#include <utility> // std::pair (renderRunSummaryJson manifest)
34#include <vector>
35
36namespace OpenMS
37{
38
39class Percolator;
40class TheoreticalSpectrumGenerator;
41
56class OPENMS_DLLAPI ProSEAlgorithm :
58 public ProgressLogger
59{
60 public:
62
65 static constexpr const char* CHIMERIC_RANK = "chimeric_rank";
66
69 static constexpr double MIN_DECOYS_PER_TARGET = 0.5;
71 static constexpr double MAX_DECOYS_PER_TARGET = 2.0;
72
78 static constexpr const char* INPUT_PRECURSOR_TOLERANCES = "input_precursor_mass_tolerances";
80 static constexpr const char* INPUT_FRAGMENT_TOLERANCES = "input_fragment_mass_tolerances";
81
83 enum class ExitCodes
84 {
85 EXECUTION_OK,
86 INPUT_FILE_EMPTY,
87 UNEXPECTED_RESULT,
88 UNKNOWN_ERROR,
89 ILLEGAL_PARAMETERS
90 };
91
102 {
103 std::string input_file;
104 Size ms2_spectra = 0;
105 Size profile_spectra = 0;
106 Size charge_out_of_range_spectra = 0;
107 Size matched_spectra = 0;
108 Size target_psms = 0;
109 Size decoy_psms = 0;
110 bool fdr_applied = false;
111 double achieved_psm_fdr = -1.0;
112 Size unique_peptides = 0;
113 Size unique_proteins = 0;
114 std::map<Int, Size> charge_histogram;
115 std::map<Size, Size> missed_cleavage_histogram;
116 bool score_stats_valid = false;
117 double hyperscore_min = 0.0;
118 double hyperscore_median = 0.0;
119 double hyperscore_max = 0.0;
124 bool prec_tol_valid = false;
125 double prec_err_median = 0.0, prec_err_mad = 0.0, prec_err_recommended = 0.0;
128 bool frag_tol_valid = false;
129 double frag_err_median = 0.0, frag_err_mad = 0.0, frag_err_recommended = 0.0;
130 double seconds_search = 0.0;
131 double seconds_calibration = 0.0;
132 double seconds_fdr = 0.0;
135 std::vector<std::pair<std::string, DataValue>> recalibration;
136 };
137
147 {
148 std::string database_file;
149 std::string enzyme;
150 double precursor_tol_lower = 0.0, precursor_tol_upper = 0.0;
152 double fragment_tol = 0.0;
153 std::string fragment_tol_unit;
154 Int min_charge = 0, max_charge = 0;
155 Size missed_cleavages = 0;
156 std::vector<std::string> fixed_mods, variable_mods, ion_series;
157 bool open_search = false;
158 bool calibration_enabled = false;
159 std::string recalibrate;
160 bool peptide_mass_mode = false;
161 bool chunked = false;
162 std::string decoy_mode;
163 double psm_fdr_threshold = 0.0, protein_fdr_threshold = 0.0;
164 Size db_target_proteins = 0;
165 Size db_decoy_proteins = 0;
166 Size indexed_peptides = 0;
167 Size indexed_fragments = 0;
168 double seconds_index_build = 0.0;
169 double seconds_total = 0.0;
170 double seconds_output = 0.0;
171 double seconds_qpx_extended = 0.0;
172 };
173
180 {
182 bool applied = false;
184 std::string skipped_reason;
187 std::string warning;
190 std::string model;
191 };
192
198 {
199 int subset_max_train = 0;
200 std::string subset_mode = "out_of_fold";
201 int curve_start = 100000;
202 double curve_min_gain = 0.002;
203 int iterations = 10;
204 double tron_epsilon = 1e-7;
205 bool warm_start = false;
206 bool single_cneg = false;
207 std::string solver = "newton";
208 std::string use_pi0 = "true";
209 bool calc_mass_feature = false;
210 bool fixed_enzyme_termini = false;
211 bool peptide_level = true;
212 };
213
221 static void stratumQValues(PeptideIdentificationList& peptide_ids);
222
231 static bool reuseTrainingDraw(UInt64 seed, Size file, Size spectrum, double fraction);
232
236 static bool reuseCalibrationDraw(UInt64 seed, Size file, Size spectrum, double fraction);
237
265
308 {
309 std::vector<SearchResult> per_file;
311
315 std::string decoy_string;
317 bool decoy_is_prefix = true;
319 bool have_decoys = false;
320
324 };
325
328 {
329 std::vector<ProteinIdentification> protein_ids;
333 bool protein_fdr_applied = false;
336 std::vector<std::unordered_map<std::string, double>> file_peptide_q_values;
337 };
338
348 {
349 std::vector<FASTAFile::FASTAEntry> db;
351
361 bool release_fragment_index_after_scoring = false;
362
367 std::string decoy_string;
369 bool decoy_is_prefix = true;
372 bool have_decoys = false;
377 bool electron_ions = false;
378 };
379
404 ExitCodes search(const std::string& in_spectra,
405 const std::string& in_db,
406 std::vector<ProteinIdentification>& prot_ids,
407 PeptideIdentificationList& pep_ids) const;
408
459 static bool applyCompleteSetProteinFDR(std::vector<ProteinIdentification>& protein_ids,
460 PeptideIdentificationList& peptide_ids,
461 const std::string& decoy_string,
462 bool decoy_is_prefix,
463 double protein_fdr,
464 bool remove_decoys,
465 const PeptideIdentificationList& inference_only_psms);
466
485 static std::string inferProteins(std::vector<ProteinIdentification>& protein_ids,
486 const PeptideIdentificationList& peptide_ids,
487 const PeptideIdentificationList& inference_only_psms = PeptideIdentificationList());
488
498 static void removeUnreportedProteins(std::vector<ProteinIdentification>& protein_ids,
499 const PeptideIdentificationList& peptide_ids,
500 const PeptideIdentificationList& also_referencing = PeptideIdentificationList());
501
515 static Size removeDuplicateProteins(std::vector<FASTAFile::FASTAEntry>& db, const std::string& source);
516
529
558 static bool annotatePeptideQValues(PeptideIdentificationList& peptide_ids, Size* target_peptides_1pct = nullptr);
559
598 static PercolatorRescoring rescoreWithPercolator(std::vector<ProteinIdentification>& protein_ids,
599 PeptideIdentificationList& peptide_ids,
600 int threads,
601 Size max_train_psms = 0);
602
611 static std::string pinEnzymeName(const std::string& enzyme);
612
619 static std::string pinFeatureEnzyme(const std::string& enzyme, bool fixed_enzyme_termini);
620
637 static PeakMap loadSpectra(const std::string& filename, const std::function<bool(const MSSpectrum&)>& keep = {});
638
666 bool applyDeferredPsmFDR(const std::vector<ProteinIdentification>& protein_ids,
667 PeptideIdentificationList& peptide_ids,
668 bool rescored,
669 double psm_fdr,
670 PeptideIdentificationList* inference_only_psms = nullptr) const;
671
718 SearchResult searchWithModificationAnalysis(const std::string& in_spectra,
719 const std::string& in_db,
720 const std::string& output_base_name = "") const;
721
742 const std::vector<FASTAFile::FASTAEntry>& fasta_db,
743 std::vector<ProteinIdentification>& prot_ids,
744 PeptideIdentificationList& pep_ids) const;
745
766 SearchContext prepareContext(const std::vector<FASTAFile::FASTAEntry>& fasta_db) const;
767
781 SearchContext prepareContext(const std::vector<FASTAFile::FASTAEntry>& fasta_db, bool electron_ions) const;
782
805 SearchContext& ctx,
806 std::vector<ProteinIdentification>& prot_ids,
807 PeptideIdentificationList& pep_ids) const;
808
820 const std::vector<FASTAFile::FASTAEntry>& fasta_db,
821 const std::string& output_base_name = "") const;
822
877 const std::vector<std::string>& in_spectra_files,
878 const std::vector<FASTAFile::FASTAEntry>& fasta_db,
879 const std::vector<std::string>& output_base_names = {},
880 const std::string& aggregate_base_name = "",
881 bool build_pooled_aggregate = true) const;
882
897 const std::vector<std::string>& in_spectra_files,
898 const std::string& in_db,
899 const std::vector<std::string>& output_base_names = {},
900 const std::string& aggregate_base_name = "",
901 bool build_pooled_aggregate = true) const;
902
966 bool remove_decoys = true) const;
967
992
996 void setParameterNamePrefix(const std::string& prefix) { parameter_name_prefix_ = prefix; }
997
1001 void setKeepPreFdrPsms(bool keep)
1002 {
1003 keep_pre_fdr_psms_ = keep;
1004 if (!keep) { pre_fdr_peptide_ids_ = PeptideIdentificationList(); }
1005 }
1006
1008 using FileResultConsumer = std::function<void(Size, const SearchResult&)>;
1009
1028 {
1029 file_result_consumer_ = std::move(consumer);
1030 }
1031
1032 protected:
1033 void updateMembers_() override;
1034
1037 {
1039 /*
1040 std::string_view sequence;
1041 SignedSize peptide_mod_index; ///< enumeration index of the non-RNA peptide modification
1042 */
1043 // Layout: doubles first, then floats, then int, then uint16_t — minimizes padding (40 bytes excluding AASequence)
1044 double score = 0;
1045 double delta_mass = 0.0;
1046 float prefix_fraction = 0;
1047 float suffix_fraction = 0;
1048 float mean_error = 0.0f;
1049 int isotope_error = 0;
1050 uint16_t applied_charge = 0;
1051 uint16_t matched_prefix_ions = 0;
1052 uint16_t matched_suffix_ions = 0;
1053 UInt32 index_peptide = 0;
1054
1055 static bool hasBetterScore(const AnnotatedHit_& a, const AnnotatedHit_& b)
1056 {
1057 if (a.score != b.score) return a.score > b.score;
1058 return a.sequence < b.sequence;
1059 }
1060 };
1061
1082 {
1083 double sum = 0.0;
1084 double sumsq = 0.0;
1085 double best = 0.0;
1086 double second_best = 0.0;
1087 Size count = 0;
1090 std::unordered_set<std::string> seen_candidates;
1092 int scoring_thread = 0;
1093
1095 void add(double score)
1096 {
1097 if (score > best) { second_best = best; best = score; }
1098 else if (score > second_best) { second_best = score; }
1099 sum += score;
1100 sumsq += score * score;
1101 ++count;
1102 }
1103
1105 double deltaScore() const { return best - second_best; }
1106
1128 double zScore() const;
1129 };
1130
1140 {
1141 unsigned int min_peaks{3};
1142 bool charge_cap_precursor{false};
1143 bool sum_intensity{false};
1144 };
1145
1160 static void preprocessSpectra_(PeakMap& exp,
1161 double fragment_mass_tolerance,
1162 bool fragment_mass_tolerance_unit_ppm,
1163 bool deisotope_requested,
1164 Size peaks_keep_n,
1165 Int peaks_window_top,
1166 const std::string& window_type,
1167 const DeisotopingSettings_& deisotoping,
1168 FragmentIonLikelihoodModel::PeakLists* ion_evidence = nullptr,
1169 bool ion_evidence_scored_peaks = false,
1170 PeakMap* evidence_spectra = nullptr,
1171 PeakMap* query_spectra = nullptr);
1172
1174 static void preprocessSpectra_(PeakMap& exp,
1175 double fragment_mass_tolerance,
1176 bool fragment_mass_tolerance_unit_ppm,
1177 bool deisotope_requested,
1178 Size peaks_keep_n,
1179 Int peaks_window_top,
1180 const std::string& window_type = "auto");
1181
1208 void annotateIonPriors_(const PeakMap& spectra,
1210 std::vector<ProteinIdentification>& protein_ids,
1211 PeptideIdentificationList& peptide_ids) const;
1212
1215
1217 static void filterLocalPeaks_(MSSpectrum& spectrum, Size peaks_per_window);
1218
1220 enum class DecoyMode_
1221 {
1222 AUTO,
1223 GENERATE,
1224 IGNORE
1225 };
1226
1235 {
1236 bool generate{false};
1237 bool strip_existing{false};
1238 bool have_decoys{false};
1239 std::string decoy_string;
1240 bool is_prefix{true};
1241 std::string strip_string;
1242 bool strip_is_prefix{true};
1243 };
1244
1254 const std::vector<FASTAFile::FASTAEntry>& db) const;
1255
1268 Param fragmentIndexParameters_(bool electron_ions = false) const;
1269
1272 struct SpectrumGenerators_;
1273
1275 struct MzRecalibration_;
1276
1278 SpectrumGenerators_ spectrumGenerators_() const;
1279
1282 {
1283 double chance_match_surprise = 0.0;
1284 double mass_competition_evidence = 0.0;
1285 };
1286
1288 static std::vector<double> localPeakDensities_(const MSSpectrum& spectrum);
1289
1309 const MSSpectrum& theoretical,
1310 const std::vector<double>& densities,
1311 double tolerance, bool ppm);
1312
1316 const MSSpectrum& theoretical,
1317 int max_charge,
1318 const std::vector<double>& densities,
1319 double tolerance, bool ppm,
1320 std::vector<double>& alternatives);
1321
1324 const MSSpectrum& theoretical,
1325 const std::vector<Int>& charges,
1326 int max_charge,
1327 const std::vector<double>& densities,
1328 double tolerance, bool ppm,
1329 std::vector<double>& alternatives);
1330
1332 static bool isElectronActivated_(const MSSpectrum& spectrum);
1333
1335 Size countElectronActivated_(const PeakMap& spectra) const;
1336
1344 std::vector<FASTAFile::FASTAEntry> buildDecoyAugmentedDB_(
1345 const std::vector<FASTAFile::FASTAEntry>& fasta_db,
1346 const DecoyStrategy_& strategy) const;
1347
1349 std::vector<FASTAFile::FASTAEntry> buildDecoyAugmentedDB_(
1350 std::vector<FASTAFile::FASTAEntry>&& fasta_db,
1351 const DecoyStrategy_& strategy) const;
1352
1357 const std::vector<std::string>& in_spectra_files,
1358 const std::vector<FASTAFile::FASTAEntry>& fasta_db_given,
1359 const std::string* in_db,
1360 const std::vector<std::string>& output_base_names,
1361 const std::string& aggregate_base_name,
1362 bool build_pooled_aggregate) const;
1363
1368 void reportDecoyParity_(const SearchContext& ctx) const;
1369 SearchContext prepareContext_(std::vector<FASTAFile::FASTAEntry>&& fasta_db, bool electron_ions,
1370 const std::function<const PeakMap*(Size)>& searched_spectra = {}) const;
1371
1376 bool restrictIndexToSpectra_() const { return !chimeric_enabled_ && !(calibration_enabled_ && calibration_recalibrate_ == "linear"); }
1377
1380 void buildFragmentIndex_(SearchContext& ctx, const Param& params, const std::function<const PeakMap*(Size)>& searched_spectra) const;
1381
1383 static double calibrationPassWindow_(double configured, bool ppm);
1384
1386 static double measuredError_(double offset, double sigma);
1387
1390 static double measuredCoverage_(const std::vector<double>& errors, bool fragment);
1391
1394 bool chimericSearch_() const { return chimeric_enabled_ && database_chunk_size_ == 0; }
1395
1398 {
1399 Size parent = 0;
1401 std::vector<UInt32> removed;
1402 };
1403
1428 void searchCoIsolated_(const PeakMap& spectra,
1429 const std::vector<std::vector<AnnotatedHit_>>& annotated_hits,
1430 FragmentIndex& fi,
1431 const std::vector<FASTAFile::FASTAEntry>& db,
1432 const SpectrumGenerators_& generators,
1433 double fragment_tol,
1434 bool fragment_tol_ppm,
1435 bool open_search_mode,
1436 std::vector<CoIsolatedPSM_>& psms,
1437 std::vector<std::vector<AnnotatedHit_>>& hits,
1438 std::vector<CandidatePoolStats_>& pool_stats) const;
1439
1442 static MSSpectrum residualSpectrum_(const MSSpectrum& spectrum, const std::vector<UInt32>& removed, const Precursor& precursor);
1443
1457 std::vector<FASTAFile::FASTAEntry> buildCalibrationSample_(
1458 const std::vector<FASTAFile::FASTAEntry>& full_db) const;
1459
1474 PeakMap& spectra,
1475 std::vector<FASTAFile::FASTAEntry>& full_db,
1476 const DecoyStrategy_& strategy,
1477 std::vector<ProteinIdentification>& protein_ids,
1478 PeptideIdentificationList& peptide_ids) const;
1479
1505 const PeakMap& spectra,
1506 FragmentIndex& fi,
1507 const std::vector<FASTAFile::FASTAEntry>& db,
1508 const SpectrumGenerators_& generators,
1509 double effective_fragment_tol,
1510 bool fragment_mass_tolerance_unit_ppm,
1511 bool open_search_mode,
1512 std::vector<std::vector<AnnotatedHit_>>& annotated_hits,
1513 std::vector<CandidatePoolStats_>& pool_stats,
1514 const std::string& progress_label,
1515 const PeakMap* query_spectra = nullptr) const;
1516
1522 static std::vector<SignedSize> scoringOrder_(const PeakMap& spectra, const PeakMap* query_spectra);
1523
1561 void postProcessHits_(const PeakMap& exp,
1562 std::vector<std::vector<ProSEAlgorithm::AnnotatedHit_> >& annotated_hits,
1563 const std::vector<CandidatePoolStats_>& pool_stats,
1564 std::vector<ProteinIdentification>& protein_ids,
1565 PeptideIdentificationList& peptide_ids,
1566 Size top_hits,
1567 const StringList& modifications_fixed,
1568 const StringList& modifications_variable,
1569 Int peptide_missed_cleavages,
1570 double precursor_mass_tolerance,
1571 double fragment_mass_tolerance,
1572 const std::string& precursor_mass_tolerance_unit_ppm,
1573 const std::string& fragment_mass_tolerance_unit_ppm,
1574 const Int precursor_min_charge,
1575 const Int precursor_max_charge,
1576 const std::string& enzyme,
1577 const std::string& database_name,
1578 const PeakMap* evidence_spectra = nullptr,
1579 const std::vector<Size>* evidence_parent = nullptr,
1580 bool defer_peak_annotations = false,
1581 const MzRecalibration_* fragment_recalibration = nullptr) const;
1582
1589 double fragment_mass_tolerance, const std::string& fragment_mass_tolerance_unit_ppm,
1590 const MzRecalibration_* fragment_recalibration = nullptr) const;
1591
1600 std::vector<ProteinIdentification>& protein_ids,
1601 PeptideIdentificationList& peptide_ids) const;
1602
1603 bool peptdeep_enable_{false};
1606 std::string peptdeep_instrument_{"QE"};
1607 double peptdeep_nce_{-1.0};
1608 std::string peptdeep_rt_model_type_{"b_spline"};
1609 int peptdeep_batch_size_{500};
1610
1614 mutable double precursor_mass_tolerance_lower_{10.0};
1615 mutable double precursor_mass_tolerance_upper_{10.0};
1616 std::string precursor_mass_tolerance_unit_{"ppm"};
1617
1620
1622
1624
1629 bool deisotope_requested_{true};
1630 bool scoring_multiple_charges_{false};
1631 int scoring_max_charge_{2};
1632 bool mass_accuracy_score_{false};
1633 double mass_error_sd_ppm_{7.0};
1634
1636 int scoringMaxCharge_(int precursor_charge) const
1637 {
1638 return scoring_multiple_charges_ ? std::max(1, std::min(precursor_charge - 1, scoring_max_charge_)) : 1;
1639 }
1640 Size peaks_keep_n_{0};
1641 Int peaks_window_top_{20};
1642 std::string peaks_window_type_ {"auto"};
1644 bool query_raw_spectrum_{false};
1645
1647
1649
1651
1652 std::string enzyme_;
1653
1654 DecoyMode_ decoy_mode_{DecoyMode_::AUTO};
1655 std::string decoy_prefix_;
1656 bool decoy_keep_termini_ = false;
1657 bool decoy_parity_report_ = false;
1658 // The effective values of the current search: buildDecoyAugmentedDB_() (a const step) re-derives them from the
1659 // parameters at every database build and switches both off when the reused decoys rarely start with M (the
1660 // Met-share check of that function); nterm_options_disabled_ records that for the output's search parameters.
1661 mutable bool terminal_features_ = false;
1662 mutable bool stratum_q_values_ = false;
1663 mutable bool nterm_options_disabled_ = false;
1664
1665 bool rescore_{true};
1668 mutable std::string reset_run_name_;
1669 std::string reuse_mode_{"per_file"};
1670 Size reuse_max_train_{250000};
1671 Size reuse_static_files_{1};
1672 double reuse_max_shift_{0.5};
1673 Size max_train_psms_{500000};
1674 double fdr_psm_{0.0};
1675 bool fdr_psm_by_scored_charges_{true};
1676 double fdr_protein_{0.0};
1677 double fdr_protein_inference_psm_{0.1};
1678
1680
1681 bool self_trained_ion_priors_{false};
1682 FragmentIonLikelihoodModel::ContextSet ion_prior_model_{FragmentIonLikelihoodModel::ContextSet::RICH};
1683 bool ion_prior_scored_peaks_{false};
1684 int ion_prior_max_fragment_charge_{2};
1685 double ion_prior_train_fdr_{0.01};
1686 Size ion_prior_min_psms_{100};
1687 bool ion_prior_feature_llr_{true};
1688 bool ion_prior_feature_explained_{true};
1689 bool ion_prior_feature_topk_{false};
1690
1694 EnzymaticDigestion::Specificity peptide_enzyme_specificity_{EnzymaticDigestion::SPEC_FULL};
1695
1696
1699 Size rescore_top_hits_{0};
1702 {
1703 return rescore_top_hits_ > 0 ? rescore_top_hits_ : report_top_hits_;
1704 }
1709 {
1710 if (!rescore_ || decoy_mode_ == DecoyMode_::IGNORE) return report_top_hits_;
1711 return keep_pre_fdr_psms_ ? std::max(report_top_hits_, rescoreTopHits_()) : rescoreTopHits_();
1712 }
1715 bool isotope_error_observed_minus_theoretical_{true};
1716
1717 bool add_a_ions_{false};
1718 bool add_b_ions_{true};
1719 bool add_c_ions_{false};
1720 bool add_x_ions_{false};
1721 bool add_y_ions_{true};
1722 bool add_z_ions_{false};
1723 bool add_zp1_ions_{false};
1724 bool ions_by_activation_{true};
1725 bool protein_mapping_from_index_{true};
1726
1727 Size database_chunk_size_{0};
1728
1729 bool calibration_enabled_{false};
1730 double calibration_subset_ratio_{0.1};
1731 bool chimeric_enabled_{false};
1732 Size calibration_min_psms_{50};
1733 double calibration_sigma_factor_{4.0};
1734 double calibration_precursor_sigma_factor_{0.0};
1735 double calibration_min_precursor_tol_{0.0};
1736 double calibration_min_fragment_tol_{0.0};
1737 std::string calibration_recalibrate_{"none"};
1738 Size calibration_recalibrate_rt_chunks_{1};
1739
1742 static constexpr const char* OBSERVED_PRECURSOR_MZ = "observed_precursor_mz";
1745 static constexpr const char* OBSERVED_COISOLATED_MZ = "observed_coisolated_mz";
1746
1755 struct OPENMS_DLLAPI MzRecalibration_ // exported: the class test calls its functions (MSVC links nothing of a nested struct without it)
1756 {
1757 struct Chunk { double rt; double intercept; double slope; Size points; };
1758 std::vector<Chunk> chunks;
1759 bool ppm{true};
1760 bool active() const { return !chunks.empty(); }
1761 double error(double mz, double rt) const;
1762 double correct(double mz, double rt) const;
1763 double uncorrect(double corrected, double rt) const;
1768 struct OPENMS_DLLAPI AtRT // (exported like its parent: MSVC links nothing of a nested struct without it)
1769 {
1770 const Chunk* lo{nullptr};
1771 const Chunk* hi{nullptr};
1772 double w{0.0};
1773 bool ppm{true};
1774 double error(double mz) const
1775 {
1776 if (lo == nullptr) return 0.0;
1777 const double e_lo = lo->intercept + lo->slope * mz;
1778 if (hi == nullptr) return e_lo;
1779 return (1.0 - w) * e_lo + w * (hi->intercept + hi->slope * mz);
1780 }
1781 double correct(double mz) const
1782 {
1783 const double e = error(mz);
1784 return ppm ? mz - e * 1e-6 * mz : mz - e;
1785 }
1786 };
1787 AtRT at(double rt) const;
1788 std::string toString() const;
1795 static MzRecalibration_ fit(const std::vector<double>& errors, const std::vector<double>& mzs,
1796 const std::vector<double>& rts, Size n_chunks, Size min_points, bool linear, bool ppm);
1797 };
1798
1809 {
1810 double precursor_shift{0};
1811 double precursor_sigma{0};
1812 double precursor_raw_shift{0};
1813 double precursor_raw_sigma{0};
1814 double fragment_raw_shift{0};
1815 double fragment_raw_sigma{0};
1818 bool recalibrated() const { return precursor_recalibration.active() || fragment_recalibration.active(); }
1820 const MzRecalibration_* appliedFragmentRecalibration() const { return success && fragment_recalibration.active() ? &fragment_recalibration : nullptr; }
1821 double precursor_spread{0};
1822 double cal_lower{0};
1823 double cal_upper{0};
1824 double fragment_tolerance{0};
1825 double fragment_shift{0};
1826 double fragment_sigma{0};
1827 double precursor_coverage{0};
1828 double fragment_coverage{0};
1829 Size psms{0};
1831 double precursor_measured_coverage{0};
1833 double fragment_measured_coverage{0};
1835 bool precursor_measurement_trusted{false};
1837 bool fragment_measurement_trusted{false};
1838 Size fragment_peaks{0};
1839 bool extreme_bias{false};
1840 bool success{false};
1841 };
1842
1847
1854
1858 bool keep_pre_fdr_psms_ = false;
1862 std::string paramName_(const std::string& name) const { return parameter_name_prefix_ + name; }
1865 mutable bool pool_rescoring_ = false;
1867 bool keepPreRescoringPsms_() const { return keep_pre_fdr_psms_ || pool_rescoring_; }
1870 mutable Size pool_files_ = 0;
1881 static std::vector<Size> transferSample_(const PeptideIdentificationList& ids, Size max_psms, Size hits_per_spectrum);
1888 mutable std::shared_ptr<void> released_hits_;
1889
1891 struct ReuseScoring_;
1893 struct ReuseModel_;
1896 {
1898 const std::vector<ProteinIdentification>* protein_ids;
1900 };
1901
1906 static PercolatorRescoring rescoreWithPercolator_(std::vector<ProteinIdentification>& protein_ids,
1907 PeptideIdentificationList& peptide_ids,
1908 int threads,
1909 std::vector<std::vector<PeptideHit>>* dropped,
1910 const PercolatorTraining& training,
1911 const Param& extra,
1912 const ReuseScoring_* reuse = nullptr);
1913
1916 std::shared_ptr<const ReuseModel_> trainReuseModel_(const std::vector<ReuseRun_>& runs, int threads) const;
1917
1921 PercolatorRescoring rescoreWithReuseModel_(std::vector<ProteinIdentification>& protein_ids,
1922 PeptideIdentificationList& peptide_ids,
1923 Size file_index,
1924 const ReuseModel_& model,
1925 bool check_shift,
1926 int threads,
1927 std::vector<std::vector<PeptideHit>>* dropped) const;
1928
1933 void applyRescoredPsmFDR_(std::vector<ProteinIdentification>& protein_ids,
1934 PeptideIdentificationList& peptide_ids,
1935 bool has_decoys,
1936 RunStatistics& stats,
1937 bool rescored,
1938 PeptideIdentificationList* inference_only_psms) const;
1939
1942 void finishDeferredRescoring_(MultiFileSearchResult& mfres, const std::vector<Size>& deferred) const;
1943
1945 mutable std::shared_ptr<const ReuseModel_> reuse_model_;
1947 mutable bool reuse_defer_ = false;
1949 mutable Size reuse_file_index_ = 0;
1953
1961 mutable double last_mod_match_tolerance_used_{-1.0};
1962
1974 {
1975 if (precursor_mass_tolerance_lower_ <= 0.0) return precursor_mass_tolerance_upper_;
1976 if (precursor_mass_tolerance_upper_ <= 0.0) return precursor_mass_tolerance_lower_;
1977 return std::min(precursor_mass_tolerance_lower_, precursor_mass_tolerance_upper_);
1978 }
1979
1994 FragmentIndex& fragment_index,
1995 const std::vector<FASTAFile::FASTAEntry>& db,
1996 const PeakMap* query_spectra = nullptr) const;
1997
2008 void applyRecalibration_(const CalibrationResult_& cal, PeakMap& spectra, PeakMap* query_spectra,
2009 PeakMap* evidence_spectra) const;
2010
2013 void recordRecalibration_(const CalibrationResult_& cal, std::vector<ProteinIdentification>& protein_ids) const;
2014
2033 {
2035 static constexpr Size SHARDS = 64;
2037 std::vector<std::string_view> sequences;
2039 std::vector<std::vector<std::pair<UInt32, UInt32>>> occurrences;
2041 std::vector<std::unordered_map<std::string_view, Size>> entries;
2043 std::string fallback_reason;
2044
2046 Size find(std::string_view sequence) const
2047 {
2048 if (entries.empty()) return sequences.size();
2049 const auto& table = entries[std::hash<std::string_view>{}(sequence) % SHARDS];
2050 const auto entry = table.find(sequence);
2051 return entry == table.end() ? sequences.size() : entry->second;
2052 }
2053 };
2054
2065 const std::vector<FASTAFile::FASTAEntry>& db,
2066 std::vector<UInt32> candidates,
2067 const Param& indexer_parameters);
2068
2077 static bool applyProteinMapping_(const ProteinMapping_& mapping,
2078 const std::vector<FASTAFile::FASTAEntry>& db,
2079 const Param& indexer_parameters,
2080 std::vector<ProteinIdentification>& protein_ids,
2081 PeptideIdentificationList& peptide_ids,
2082 std::string& fallback_reason);
2083
2086 static bool accessionHasDecoyMarker_(const std::string& accession,
2087 const std::string& marker, bool is_prefix);
2088
2092 static void removeProteinsReferencedByNeither_(std::vector<ProteinIdentification>& protein_ids,
2093 const PeptideIdentificationList& peptide_ids,
2094 const PeptideIdentificationList& also_referencing);
2095
2098 static constexpr const char* SEARCH_ENGINE_SCORE = "ln(hyperscore)";
2099
2105
2107 static Size countDecoyEntries_(const std::vector<FASTAFile::FASTAEntry>& db, const std::string& marker, bool is_prefix);
2108
2122 static void poolSearchedFiles_(std::vector<SearchResult>& per_file, bool move_psms, const StringList& in_spectra_files,
2123 std::vector<ProteinIdentification>& protein_ids, PeptideIdentificationList& peptide_ids,
2124 double configured_precursor_tolerance = -1.0, double configured_fragment_tolerance = -1.0);
2125
2127 static bool searched_(const SearchResult& pf);
2128
2131 static int searchedFileOf_(const PeptideIdentification& id, const std::vector<SearchResult>& per_file);
2132
2137 static void returnPooledPsms_(PeptideIdentificationList& pooled, std::vector<SearchResult>& per_file,
2138 const std::vector<std::unordered_map<std::string, double>>* file_peptide_q_values);
2139
2142 static std::vector<std::unordered_map<std::string, double>> filePeptideQValues_(const PeptideIdentificationList& pooled,
2143 Size files);
2144
2151 static void capturePreFdrStats_(const PeptideIdentificationList& peptide_ids,
2152 RunStatistics& stats);
2153
2157 static double maxRetainedScore_(const PeptideIdentificationList& peptide_ids);
2158
2161 static void keepTopHits_(PeptideIdentificationList& peptide_ids, Size n);
2162
2174 PercolatorRescoring applyPsmFDR_(std::vector<ProteinIdentification>& protein_ids,
2175 PeptideIdentificationList& peptide_ids,
2176 bool has_decoys,
2177 RunStatistics& stats,
2178 PeptideIdentificationList* pre_fdr_psms = nullptr,
2179 PeptideIdentificationList* inference_only_psms = nullptr) const;
2180
2184 static void markRescoredByPercolator_(std::vector<ProteinIdentification>& protein_ids, const Param& pp,
2185 const PercolatorTraining& training, const Percolator* perc = nullptr,
2186 const ReuseScoring_* reuse = nullptr);
2187
2189 static bool hasPSMs_(const PeptideIdentificationList& ids);
2190
2195 static void tdcQValues_(PeptideIdentificationList& peptide_ids, bool plus_one = false);
2196
2197
2216 void rescoreFilesTogether_(MultiFileSearchResult& mfres, const std::vector<std::string>& in_spectra_files) const;
2217
2220 void collectInferenceOnlyPsms_(const PeptideIdentificationList& peptide_ids, double psm_fdr,
2221 PeptideIdentificationList& inference_only_psms) const;
2222
2228 void collectRunStatistics_(const PeakMap& spectra,
2229 const std::vector<ProteinIdentification>& protein_ids,
2230 const PeptideIdentificationList& peptide_ids,
2231 RunStatistics& stats) const;
2232
2236 {
2237 Size ms2 = 0;
2238 Size profile = 0;
2239 Size charge_out_of_range = 0;
2240 };
2241
2243 SpectraCounts_ countSpectra_(const PeakMap& spectra) const;
2244
2249 void preprocessSearchedSpectra_(PeakMap& spectra, const std::string& input,
2251 PeakMap* evidence_spectra, PeakMap* query_spectra) const;
2252
2253 public:
2264 const PeptideIdentificationList& peptide_ids,
2265 const std::string& enzyme,
2266 bool fdr_applied);
2267
2270 static void releaseInParallel(SearchResult& result);
2271
2278 static std::string renderTotalTime(const SharedSearchStats& sh);
2279
2284 static void renderRunSummary(const RunStatistics& stats,
2285 const SharedSearchStats& shared,
2287 bool is_open_search,
2288 std::ostream& os);
2289
2293 std::ostream& os);
2294
2301 static std::string renderRunSummaryYaml(
2302 const MultiFileSearchResult& mfres,
2303 const std::vector<std::pair<std::string, std::vector<std::string>>>& manifest,
2304 Size files_failed,
2305 Size files_total);
2306
2307 private:
2308
2311 {
2312 return FragmentIndex::isOpenSearchMode(precursor_mass_tolerance_lower_,
2313 precursor_mass_tolerance_upper_,
2314 precursor_mass_tolerance_unit_ == "ppm");
2315 }
2316};
2317
2318} // namespace
Definition AASequence.h:96
A base class for all classes handling default parameters.
Definition DefaultParamHandler.h:66
Specificity
when querying for valid digestion products, this determines if the specificity of the two peptide end...
Definition EnzymaticDigestion.h:43
Generates from a set of Fasta files a 2D-datastructure which stores all theoretical masses of all b a...
Definition FragmentIndex.h:36
Compact peak lists of the spectra of one run: per peak only its m/z and its intensity-rank bin.
Definition FragmentIonLikelihoodModel.h:92
ContextSet
Ion contexts and outcomes the model distinguishes.
Definition FragmentIonLikelihoodModel.h:68
In-Memory representation of a mass spectrometry run.
Definition MSExperiment.h:49
The representation of a 1D spectrum.
Definition MSSpectrum.h:45
Combined result of open search modification analysis.
Definition OpenSearchModificationAnalysis.h:106
Management and storage of parameters / INI files.
Definition Param.h:46
Container for peptide identifications from multiple spectra.
Definition PeptideIdentificationList.h:66
Represents the set of candidates (SpectrumMatches) identified for a single precursor spectrum.
Definition PeptideIdentification.h:66
In-process Percolator: semi-supervised target/decoy rescoring with q-values + PEPs.
Definition Percolator.h:81
Precursor meta information.
Definition Precursor.h:37
Fragment-index-based peptide database search algorithm (experimental).
Definition ProSEAlgorithm.h:59
ExitCodes search(PeakMap &spectra, const std::vector< FASTAFile::FASTAEntry > &fasta_db, std::vector< ProteinIdentification > &prot_ids, PeptideIdentificationList &pep_ids) const
In-memory search: search spectra against a protein database without file I/O.
static LocalFragmentEvidence_ localFragmentEvidence_(const MSSpectrum &spectrum, const MSSpectrum &theoretical, const std::vector< double > &densities, double tolerance, bool ppm)
Compute local fragment-match evidence on the spectrum before window/top-N peak filtering.
static void poolSearchedFiles_(std::vector< SearchResult > &per_file, bool move_psms, const StringList &in_spectra_files, std::vector< ProteinIdentification > &protein_ids, PeptideIdentificationList &peptide_ids, double configured_precursor_tolerance=-1.0, double configured_fragment_tolerance=-1.0)
static Size countDecoyEntries_(const std::vector< FASTAFile::FASTAEntry > &db, const std::string &marker, bool is_prefix)
Helper: the entries of db whose accession carries the decoy marker (accessionHasDecoyMarker_())
std::string enzyme_
Definition ProSEAlgorithm.h:1652
static std::string renderRunSummaryYaml(const MultiFileSearchResult &mfres, const std::vector< std::pair< std::string, std::vector< std::string > > > &manifest, Size files_failed, Size files_total)
static MSSpectrum residualSpectrum_(const MSSpectrum &spectrum, const std::vector< UInt32 > &removed, const Precursor &precursor)
Size searchTopHits_() const
Definition ProSEAlgorithm.h:1708
static std::string pinFeatureEnzyme(const std::string &enzyme, bool fixed_enzyme_termini)
The enzyme argument of PercolatorInfile (store(), the in-process rescoring) for the enzN/enzC/enzInt ...
static void preprocessSpectra_(PeakMap &exp, double fragment_mass_tolerance, bool fragment_mass_tolerance_unit_ppm, bool deisotope_requested, Size peaks_keep_n, Int peaks_window_top, const std::string &window_type, const DeisotopingSettings_ &deisotoping, FragmentIonLikelihoodModel::PeakLists *ion_evidence=nullptr, bool ion_evidence_scored_peaks=false, PeakMap *evidence_spectra=nullptr, PeakMap *query_spectra=nullptr)
filter, deisotope, decharge spectra
PercolatorRescoring last_percolator_
Definition ProSEAlgorithm.h:1857
static std::string inferProteins(std::vector< ProteinIdentification > &protein_ids, const PeptideIdentificationList &peptide_ids, const PeptideIdentificationList &inference_only_psms=PeptideIdentificationList())
The protein inference of the protein FDR (applyCompleteSetProteinFDR()) and of mergeFileResults().
const std::vector< ProteinIdentification > * protein_ids
Definition ProSEAlgorithm.h:1898
FragmentIndex fragment_index
Definition ProSEAlgorithm.h:350
std::string fragment_tol_unit
Definition ProSEAlgorithm.h:153
Size peptide_max_size_
Definition ProSEAlgorithm.h:1692
static void updateFinalStats(RunStatistics &stats, const PeptideIdentificationList &peptide_ids, const std::string &enzyme, bool fdr_applied)
static double measuredError_(double offset, double sigma)
The measured mass error |offset| + 4 sigma: the range that holds practically all correct matches.
PercolatorRescoring percolator
Outcome of the Percolator rescoring of this run (parameter 'rescore')
Definition ProSEAlgorithm.h:256
static void preprocessSpectra_(PeakMap &exp, double fragment_mass_tolerance, bool fragment_mass_tolerance_unit_ppm, bool deisotope_requested, Size peaks_keep_n, Int peaks_window_top, const std::string &window_type="auto")
preprocessSpectra_() with the DeisotopingSettings_ defaults (the behaviour before its parameters exis...
SearchResult searchWithModificationAnalysis(const std::string &in_spectra, const std::string &in_db, const std::string &output_base_name="") const
Search with comprehensive results including modification analysis tables.
std::vector< std::pair< std::string, DataValue > > recalibration
Definition ProSEAlgorithm.h:135
Size precursor_max_charge_
Definition ProSEAlgorithm.h:1619
bool applyDeferredPsmFDR(const std::vector< ProteinIdentification > &protein_ids, PeptideIdentificationList &peptide_ids, bool rescored, double psm_fdr, PeptideIdentificationList *inference_only_psms=nullptr) const
Apply the PSM-level FDR to PSMs that were rescored separately, e.g. with rescoreWithPercolator() on t...
PeptideIdentificationList * peptide_ids
Definition ProSEAlgorithm.h:1899
Size precursor_min_charge_
Definition ProSEAlgorithm.h:1618
std::string decoy_prefix_
Definition ProSEAlgorithm.h:1655
static void markRescoredByPercolator_(std::vector< ProteinIdentification > &protein_ids, const Param &pp, const PercolatorTraining &training, const Percolator *perc=nullptr, const ReuseScoring_ *reuse=nullptr)
RunStatistics stats
Definition ProSEAlgorithm.h:254
PercolatorRescoring applyPsmFDR_(std::vector< ProteinIdentification > &protein_ids, PeptideIdentificationList &peptide_ids, bool has_decoys, RunStatistics &stats, PeptideIdentificationList *pre_fdr_psms=nullptr, PeptideIdentificationList *inference_only_psms=nullptr) const
void setParameterNamePrefix(const std::string &prefix)
Definition ProSEAlgorithm.h:996
Size report_top_hits_
Definition ProSEAlgorithm.h:1697
Size modifications_max_variable_mods_per_peptide_
Definition ProSEAlgorithm.h:1650
static PercolatorRescoring rescoreWithPercolator(std::vector< ProteinIdentification > &protein_ids, PeptideIdentificationList &peptide_ids, int threads, Size max_train_psms=0)
Rescore the PSMs of one search run in-process with Percolator, as the parameter 'rescore' does in eve...
static void renderModificationSummary(const OpenSearchModificationAnalysis::OpenSearchAnalysisResult &mod_analysis, std::ostream &os)
std::string warning
Definition ProSEAlgorithm.h:187
static std::vector< Size > transferSample_(const PeptideIdentificationList &ids, Size max_psms, Size hits_per_spectrum)
The spectra (positions in ids) of a seeded random sample of whole spectra with at most max_psms PSMs,...
SearchResult searchWithModificationAnalysis(PeakMap &spectra, const std::vector< FASTAFile::FASTAEntry > &fasta_db, const std::string &output_base_name="") const
In-memory search with modification analysis: no file I/O required.
void setKeepPreFdrPsms(bool keep)
Definition ProSEAlgorithm.h:1001
std::string model
Definition ProSEAlgorithm.h:190
Precursor precursor
the co-isolated precursor: that of the spectrum with its m/z and charge
Definition ProSEAlgorithm.h:1400
std::string recalibrate
calibration:recalibrate ("none", or empty, when the spectra are not corrected)
Definition ProSEAlgorithm.h:159
void searchCoIsolated_(const PeakMap &spectra, const std::vector< std::vector< AnnotatedHit_ > > &annotated_hits, FragmentIndex &fi, const std::vector< FASTAFile::FASTAEntry > &db, const SpectrumGenerators_ &generators, double fragment_tol, bool fragment_tol_ppm, bool open_search_mode, std::vector< CoIsolatedPSM_ > &psms, std::vector< std::vector< AnnotatedHit_ > > &hits, std::vector< CandidatePoolStats_ > &pool_stats) const
Search the precursors co-isolated with the selected one in what the spectrum's other PSMs leave of it...
std::string input_file
spectrum file this run searched (basename or path)
Definition ProSEAlgorithm.h:103
SearchContext prepareContext_(std::vector< FASTAFile::FASTAEntry > &&fasta_db, bool electron_ions, const std::function< const PeakMap *(Size)> &searched_spectra={}) const
PeptideIdentificationList pre_fdr_peptide_ids
Definition ProSEAlgorithm.h:257
PercolatorRescoring rescoreWithReuseModel_(std::vector< ProteinIdentification > &protein_ids, PeptideIdentificationList &peptide_ids, Size file_index, const ReuseModel_ &model, bool check_shift, int threads, std::vector< std::vector< PeptideHit > > *dropped) const
std::map< Int, Size > charge_histogram
precursor charge -> PSM count
Definition ProSEAlgorithm.h:114
static void releaseInParallel(SearchResult &result)
SpectrumGenerators_ spectrumGenerators_() const
Generators for scoring, annotation and calibration, configured from the ions:* parameters.
StringList modifications_fixed_
Definition ProSEAlgorithm.h:1646
void setFileResultConsumer(FileResultConsumer consumer)
Lets the multi-file searchWithModificationAnalysis() overloads hand each file's result to consumer as...
Definition ProSEAlgorithm.h:1027
MultiFileSearchResult searchWithModificationAnalysis(const std::vector< std::string > &in_spectra_files, const std::vector< FASTAFile::FASTAEntry > &fasta_db, const std::vector< std::string > &output_base_names={}, const std::string &aggregate_base_name="", bool build_pooled_aggregate=true) const
Multi-file search with modification analysis (in-memory FASTA).
std::string parameter_name_prefix_
Definition ProSEAlgorithm.h:1860
Param percolator_extra_
rescore_method 'reset': Percolator's RESET parameters (empty: Percolator)
Definition ProSEAlgorithm.h:1667
static void stratumQValues(PeptideIdentificationList &peptide_ids)
rescoring:stratum_q_values: grouped target-decoy competition on the best hit of every spectrum that h...
static void splitMergedPsms(MergedResult &merged, MultiFileSearchResult &result)
Makes the PSMs of each file of a multi-file search its part of the pooled result (mergeFileResults())...
static void capturePreFdrStats_(const PeptideIdentificationList &peptide_ids, RunStatistics &stats)
void annotateIonPriors_(const PeakMap &spectra, const FragmentIonLikelihoodModel::PeakLists &evidence, std::vector< ProteinIdentification > &protein_ids, PeptideIdentificationList &peptide_ids) const
Learn per-run fragment ion likelihoods from confident PSMs and annotate every hit with them.
PercolatorTraining percolator_training_
rescoring:...: options of Percolator's training
Definition ProSEAlgorithm.h:1666
void annotatePsmQValues(PeptideIdentificationList &peptide_ids) const
Annotate PSM q-values by target-decoy competition of the best hit of each spectrum,...
static bool hasPSMs_(const PeptideIdentificationList &ids)
Helper: whether a PSM of ids has a hit.
Size transferQuota_() const
std::vector< UInt32 > removed
the peaks of the spectrum that its residual spectrum leaves out (ascending)
Definition ProSEAlgorithm.h:1401
static int searchedFileOf_(const PeptideIdentification &id, const std::vector< SearchResult > &per_file)
std::vector< ProteinIdentification > protein_ids
Definition ProSEAlgorithm.h:250
bool restrictIndexToSpectra_() const
Definition ProSEAlgorithm.h:1376
bool chimericSearch_() const
Definition ProSEAlgorithm.h:1394
Size peptide_min_size_
Definition ProSEAlgorithm.h:1691
SpectraCounts_ countSpectra_(const PeakMap &spectra) const
Helper: the SpectraCounts_ of spectra.
std::vector< FASTAFile::FASTAEntry > buildDecoyAugmentedDB_(const std::vector< FASTAFile::FASTAEntry > &fasta_db, const DecoyStrategy_ &strategy) const
Build the searched database according to strategy.
static bool applyCompleteSetProteinFDR(std::vector< ProteinIdentification > &protein_ids, PeptideIdentificationList &peptide_ids, const std::string &decoy_string, bool decoy_is_prefix, double protein_fdr, bool remove_decoys, const PeptideIdentificationList &inference_only_psms)
Finalize protein-level FDR on a COMPLETE protein set (a single input file, or a merged cross-file agg...
MergedResult mergeFileResults(MultiFileSearchResult &result, const StringList &in_spectra_files, bool remove_decoys=true) const
Pools result (moving its PSMs out), infers proteins across files, applies FDR:protein of this instanc...
SearchResult aggregate
Definition ProSEAlgorithm.h:310
MultiFileSearchResult searchWithModificationAnalysis(const std::vector< std::string > &in_spectra_files, const std::string &in_db, const std::vector< std::string > &output_base_names={}, const std::string &aggregate_base_name="", bool build_pooled_aggregate=true) const
Multi-file search with modification analysis (FASTA file path).
void annotatePeptDeepFeatures_(const PeakMap &spectra, std::vector< ProteinIdentification > &protein_ids, PeptideIdentificationList &peptide_ids) const
Adds PeptDeep-prediction-derived rescoring features to the PSMs.
std::string reset_run_name_
spectra file of the run being rescored (names its RESET stem table)
Definition ProSEAlgorithm.h:1668
std::string database_file
FASTA path (empty for in-memory db)
Definition ProSEAlgorithm.h:148
static AASequence reversedNoiseSequence_(const AASequence &sequence)
Reversed sequence keeping the C-terminal residue and every residue's modification: the noise hypothes...
CalibrationResult_ runCalibrationPass_(PeakMap &spectra, FragmentIndex &fragment_index, const std::vector< FASTAFile::FASTAEntry > &db, const PeakMap *query_spectra=nullptr) const
Run a fast calibration pass on a subset of spectra to estimate mass accuracy.
std::vector< FASTAFile::FASTAEntry > buildDecoyAugmentedDB_(std::vector< FASTAFile::FASTAEntry > &&fasta_db, const DecoyStrategy_ &strategy) const
As above, but takes the entries of fasta_db over instead of copying them.
std::string strip_string
marker of pre-existing decoys to strip
Definition ProSEAlgorithm.h:1241
std::map< Size, Size > missed_cleavage_histogram
missed cleavages -> PSM count
Definition ProSEAlgorithm.h:115
static ProteinMapping_ buildProteinMapping_(const FragmentIndex &index, const std::vector< FASTAFile::FASTAEntry > &db, std::vector< UInt32 > candidates, const Param &indexer_parameters)
Collects the protein occurrences of the sequences of the index peptides candidates.
RunStatistics last_run_stats_
Definition ProSEAlgorithm.h:1853
std::string fragment_mass_tolerance_unit_
Definition ProSEAlgorithm.h:1623
static bool applyProteinMapping_(const ProteinMapping_ &mapping, const std::vector< FASTAFile::FASTAEntry > &db, const Param &indexer_parameters, std::vector< ProteinIdentification > &protein_ids, PeptideIdentificationList &peptide_ids, std::string &fallback_reason)
Writes what PeptideIndexing::run(db, protein_ids, peptide_ids) with indexer_parameters writes: the ev...
StringList annotate_psm_
Definition ProSEAlgorithm.h:1679
static void removeUnreportedProteins(std::vector< ProteinIdentification > &protein_ids, const PeptideIdentificationList &peptide_ids, const PeptideIdentificationList &also_referencing=PeptideIdentificationList())
Removes the proteins that no PSM references, and them from the protein groups.
static void filterLocalPeaks_(MSSpectrum &spectrum, Size peaks_per_window)
Keep the strongest peaks in each non-overlapping 100 Da window, including a short final window.
void applyRescoredPsmFDR_(std::vector< ProteinIdentification > &protein_ids, PeptideIdentificationList &peptide_ids, bool has_decoys, RunStatistics &stats, bool rescored, PeptideIdentificationList *inference_only_psms) const
Param fragmentIndexParameters_(bool electron_ions=false) const
ProSE parameters made safe to hand to a FragmentIndex.
static PeakMap loadSpectra(const std::string &filename, const std::function< bool(const MSSpectrum &)> &keep={})
The MS2 spectra of a spectrum file as the searches of this class read them.
OpenSearchModificationAnalysis::OpenSearchAnalysisResult modification_analysis
Definition ProSEAlgorithm.h:252
ExitCodes search(const std::string &in_spectra, const std::string &in_db, std::vector< ProteinIdentification > &prot_ids, PeptideIdentificationList &pep_ids) const
Search spectra in a spectrum file (mzML or Bruker .d) against a protein database using an FI-backed w...
std::vector< FASTAFile::FASTAEntry > db
Definition ProSEAlgorithm.h:349
static std::string renderTotalTime(const SharedSearchStats &sh)
The total time of a run, by part: "total <s>s | search of the file(s) <s>s | outputs <s>s (of ...
static bool accessionHasDecoyMarker_(const std::string &accession, const std::string &marker, bool is_prefix)
void applyRecalibration_(const CalibrationResult_ &cal, PeakMap &spectra, PeakMap *query_spectra, PeakMap *evidence_spectra) const
calibration:recalibrate: subtract the error models of cal from the MS2 spectra, in place.
void finishDeferredRescoring_(MultiFileSearchResult &mfres, const std::vector< Size > &deferred) const
static void renderRunSummary(const RunStatistics &stats, const SharedSearchStats &shared, const OpenSearchModificationAnalysis::OpenSearchAnalysisResult &mod_analysis, bool is_open_search, std::ostream &os)
ExitCodes search(PeakMap &spectra, SearchContext &ctx, std::vector< ProteinIdentification > &prot_ids, PeptideIdentificationList &pep_ids) const
In-memory search using a pre-built SearchContext.
MultiFileSearchResult searchWithModificationAnalysis_(const std::vector< std::string > &in_spectra_files, const std::vector< FASTAFile::FASTAEntry > &fasta_db_given, const std::string *in_db, const std::vector< std::string > &output_base_names, const std::string &aggregate_base_name, bool build_pooled_aggregate) const
std::shared_ptr< void > released_hits_
Definition ProSEAlgorithm.h:1888
SharedSearchStats shared
Definition ProSEAlgorithm.h:323
bool isOpenSearchMode_() const
Helper function to determine if open search should be used based on tolerance.
Definition ProSEAlgorithm.h:2310
ExitCodes searchChunked_(PeakMap &spectra, std::vector< FASTAFile::FASTAEntry > &full_db, const DecoyStrategy_ &strategy, std::vector< ProteinIdentification > &protein_ids, PeptideIdentificationList &peptide_ids) const
Chunked database search implementation.
void annotateFragmentPeaks_(const PeakMap &exp, PeptideIdentificationList &peptide_ids, double fragment_mass_tolerance, const std::string &fragment_mass_tolerance_unit_ppm, const MzRecalibration_ *fragment_recalibration=nullptr) const
The fragment annotations that postProcessHits_() leaves out with defer_peak_annotations,...
static double calibrationPassWindow_(double configured, bool ppm)
The window the calibration pass searches with, from the configured one (ppm or Da)
Size rescoreTopHits_() const
The hits per spectrum that Percolator rescores: rescoring:top_hits, or report:top_hits if that is 0.
Definition ProSEAlgorithm.h:1701
void postProcessHits_(const PeakMap &exp, std::vector< std::vector< ProSEAlgorithm::AnnotatedHit_ > > &annotated_hits, const std::vector< CandidatePoolStats_ > &pool_stats, std::vector< ProteinIdentification > &protein_ids, PeptideIdentificationList &peptide_ids, Size top_hits, const StringList &modifications_fixed, const StringList &modifications_variable, Int peptide_missed_cleavages, double precursor_mass_tolerance, double fragment_mass_tolerance, const std::string &precursor_mass_tolerance_unit_ppm, const std::string &fragment_mass_tolerance_unit_ppm, const Int precursor_min_charge, const Int precursor_max_charge, const std::string &enzyme, const std::string &database_name, const PeakMap *evidence_spectra=nullptr, const std::vector< Size > *evidence_parent=nullptr, bool defer_peak_annotations=false, const MzRecalibration_ *fragment_recalibration=nullptr) const
Filter and annotate search results.
PeptideIdentificationList inference_only_peptide_ids
Definition ProSEAlgorithm.h:263
void collectInferenceOnlyPsms_(const PeptideIdentificationList &peptide_ids, double psm_fdr, PeptideIdentificationList &inference_only_psms) const
std::string decoy_string
Definition ProSEAlgorithm.h:315
DecoyStrategy_ resolveDecoyStrategy_(const std::vector< FASTAFile::FASTAEntry > &db) const
Decide how to obtain/recognise decoys for db.
Size countElectronActivated_(const PeakMap &spectra) const
Number of spectra that ions:by_activation also scores with c and z+1 ions (0 if it is off)
DeisotopingSettings_ deisotoping_
MS2 deisotoping rule (fragment:deisotope_*)
Definition ProSEAlgorithm.h:1643
std::vector< FASTAFile::FASTAEntry > buildCalibrationSample_(const std::vector< FASTAFile::FASTAEntry > &full_db) const
Build a strided protein sample for chunked calibration.
static std::vector< double > localPeakDensities_(const MSSpectrum &spectrum)
Peak counts per Da in a fixed +/-50 m/z window around each peak of a sorted spectrum.
void scoreSpectraAgainstIndex_(const PeakMap &spectra, FragmentIndex &fi, const std::vector< FASTAFile::FASTAEntry > &db, const SpectrumGenerators_ &generators, double effective_fragment_tol, bool fragment_mass_tolerance_unit_ppm, bool open_search_mode, std::vector< std::vector< AnnotatedHit_ > > &annotated_hits, std::vector< CandidatePoolStats_ > &pool_stats, const std::string &progress_label, const PeakMap *query_spectra=nullptr) const
Score all spectra against one FragmentIndex.
static bool isElectronActivated_(const MSSpectrum &spectrum)
True if the precursor of spectrum was activated by electrons (ETD, ECD, EThcD or ETciD)
bool keepPreRescoringPsms_() const
Whether a search keeps the PSMs of each file before the rescoring (SearchResult::pre_fdr_peptide_ids)
Definition ProSEAlgorithm.h:1867
std::string paramName_(const std::string &name) const
Helper: name as the user sets the parameter (setParameterNamePrefix()), for messages.
Definition ProSEAlgorithm.h:1862
std::string decoy_mode
"generated" | "external" | "none (target-only)"
Definition ProSEAlgorithm.h:162
std::function< void(Size, const SearchResult &)> FileResultConsumer
The consumer of the files' results (setFileResultConsumer()): file index, result. Must only read the ...
Definition ProSEAlgorithm.h:1008
static void returnPooledPsms_(PeptideIdentificationList &pooled, std::vector< SearchResult > &per_file, const std::vector< std::unordered_map< std::string, double > > *file_peptide_q_values)
Size file_index
Definition ProSEAlgorithm.h:1897
PeptideIdentificationList peptide_ids
Definition ProSEAlgorithm.h:251
static std::vector< std::unordered_map< std::string, double > > filePeptideQValues_(const PeptideIdentificationList &pooled, Size files)
std::string enzyme
Definition ProSEAlgorithm.h:149
static LocalFragmentEvidence_ localFragmentEvidence_(const MSSpectrum &spectrum, const MSSpectrum &theoretical, int max_charge, const std::vector< double > &densities, double tolerance, bool ppm, std::vector< double > &alternatives)
static bool reuseCalibrationDraw(UInt64 seed, Size file, Size spectrum, double fraction)
static std::string pinEnzymeName(const std::string &enzyme)
The name of enzyme as PercolatorInfile computes the enzN/enzC/enzInt features of a ....
std::string skipped_reason
Why the PSMs were not rescored, as a sentence to show to the user (empty if applied or not attempted)
Definition ProSEAlgorithm.h:184
void updateMembers_() override
This method is used to update extra member variables at the end of the setParameters() method.
static void tdcQValues_(PeptideIdentificationList &peptide_ids, bool plus_one=false)
ExitCodes
Exit codes.
Definition ProSEAlgorithm.h:84
std::shared_ptr< const ReuseModel_ > reuse_model_
rescore_reuse: the models of a multi-file search ('static': trained on its first files; null otherwis...
Definition ProSEAlgorithm.h:1945
void rescoreFilesTogether_(MultiFileSearchResult &mfres, const std::vector< std::string > &in_spectra_files) const
The end of a multi-file search with 'rescore' (with pool_rescoring_), for the files with PSMs that Pe...
StringList modifications_variable_
Definition ProSEAlgorithm.h:1648
static double maxRetainedScore_(const PeptideIdentificationList &peptide_ids)
PeptideIdentificationList pre_fdr_peptide_ids_
Definition ProSEAlgorithm.h:1884
std::vector< SearchResult > per_file
Definition ProSEAlgorithm.h:309
double fragment_mass_tolerance_
Definition ProSEAlgorithm.h:1621
std::shared_ptr< const ReuseModel_ > trainReuseModel_(const std::vector< ReuseRun_ > &runs, int threads) const
PeptideIdentificationList inference_only_peptide_ids_
Definition ProSEAlgorithm.h:1952
SearchContext prepareContext(const std::vector< FASTAFile::FASTAEntry > &fasta_db) const
Build a SearchContext (decoy-augmented database + FragmentIndex) for reuse.
static std::vector< SignedSize > scoringOrder_(const PeakMap &spectra, const PeakMap *query_spectra)
The order in which scoreSpectraAgainstIndex_() scores the spectra: the scan indices sorted by the neu...
static Size removeDuplicateProteins(std::vector< FASTAFile::FASTAEntry > &db, const std::string &source)
Removes the repeated entries of a protein database, which searching would report twice (e....
int scoringMaxCharge_(int precursor_charge) const
Fragment charges that score a candidate of the given precursor charge; also used by the calibration p...
Definition ProSEAlgorithm.h:1636
static void removeProteinsReferencedByNeither_(std::vector< ProteinIdentification > &protein_ids, const PeptideIdentificationList &peptide_ids, const PeptideIdentificationList &also_referencing)
SearchContext prepareContext(const std::vector< FASTAFile::FASTAEntry > &fasta_db, bool electron_ions) const
Build a SearchContext whose FragmentIndex also holds c and z+1 ions.
void reportDecoyParity_(const SearchContext &ctx) const
static PercolatorRescoring rescoreWithPercolator_(std::vector< ProteinIdentification > &protein_ids, PeptideIdentificationList &peptide_ids, int threads, std::vector< std::vector< PeptideHit > > *dropped, const PercolatorTraining &training, const Param &extra, const ReuseScoring_ *reuse=nullptr)
Size peptide_missed_cleavages_
Definition ProSEAlgorithm.h:1693
std::vector< std::unordered_map< std::string, double > > file_peptide_q_values
Definition ProSEAlgorithm.h:336
CalibrationResult_ last_calibration_result_
Definition ProSEAlgorithm.h:1846
double computeModMatchTolerance_() const
Definition ProSEAlgorithm.h:1973
static LocalFragmentEvidence_ localFragmentEvidence_(const MSSpectrum &spectrum, const MSSpectrum &theoretical, const std::vector< Int > &charges, int max_charge, const std::vector< double > &densities, double tolerance, bool ppm, std::vector< double > &alternatives)
localFragmentEvidence_() with the charges of the peaks of theoretical given (charges,...
FileResultConsumer file_result_consumer_
see setFileResultConsumer()
Definition ProSEAlgorithm.h:1859
void collectRunStatistics_(const PeakMap &spectra, const std::vector< ProteinIdentification > &protein_ids, const PeptideIdentificationList &peptide_ids, RunStatistics &stats) const
std::vector< std::string > fixed_mods
Definition ProSEAlgorithm.h:156
void buildFragmentIndex_(SearchContext &ctx, const Param &params, const std::function< const PeakMap *(Size)> &searched_spectra) const
static bool useSearchEngineScore_(PeptideIdentificationList &ids)
static bool reuseTrainingDraw(UInt64 seed, Size file, Size spectrum, double fraction)
rescore_reuse: whether spectrum spectrum (its index in the run) of file file is drawn for the trainin...
void recordRecalibration_(const CalibrationResult_ &cal, std::vector< ProteinIdentification > &protein_ids) const
static bool annotatePeptideQValues(PeptideIdentificationList &peptide_ids, Size *target_peptides_1pct=nullptr)
Peptide-level q-values of Percolator-rescored PSMs, of one run or pooled from several: meta value 'pe...
std::string peptdeep_ms2_model_
Definition ProSEAlgorithm.h:1604
static void keepTopHits_(PeptideIdentificationList &peptide_ids, Size n)
static bool searched_(const SearchResult &pf)
Helper: whether the file of pf was searched (exit code EXECUTION_OK, with a run)
std::string precursor_tol_unit
Definition ProSEAlgorithm.h:151
DecoyMode_
How decoys are obtained/recognised for a search (parameter "decoys").
Definition ProSEAlgorithm.h:1221
std::string peptdeep_rt_model_
Definition ProSEAlgorithm.h:1605
static double measuredCoverage_(const std::vector< double > &errors, bool fragment)
void preprocessSearchedSpectra_(PeakMap &spectra, const std::string &input, FragmentIonLikelihoodModel::PeakLists &ion_evidence, PeakMap *evidence_spectra, PeakMap *query_spectra) const
The PSM of a precursor co-isolated with the selected one (chimeric:enabled), until its residual spect...
Definition ProSEAlgorithm.h:1398
Resolved decoy handling for one concrete input database.
Definition ProSEAlgorithm.h:1235
MS2 deisotoping rule of preprocessSpectra_().
Definition ProSEAlgorithm.h:1140
Local fragment evidence of one candidate (annotate:local_fragment_evidence).
Definition ProSEAlgorithm.h:1282
The pooled evaluation of a multi-file search (the ProSE tool's -out_merged).
Definition ProSEAlgorithm.h:328
Multi-file search result bundle.
Definition ProSEAlgorithm.h:308
Outcome of the Percolator rescoring of one search run (see rescoreWithPercolator() and the parameter ...
Definition ProSEAlgorithm.h:180
Options of Percolator's training for the rescoring (the parameters 'rescoring:...'; the defaults are ...
Definition ProSEAlgorithm.h:198
rescore_reuse: a run that trains models: its index in the search (the random halves depend on it) and...
Definition ProSEAlgorithm.h:1896
Per-run identification statistics for the end-of-search report.
Definition ProSEAlgorithm.h:102
Prepared per-database state shared across multiple spectrum files.
Definition ProSEAlgorithm.h:348
Comprehensive search result including modification analysis.
Definition ProSEAlgorithm.h:248
Configuration, database and fragment-index facts shared across all input files of one ProSE invocatio...
Definition ProSEAlgorithm.h:147
Definition ProSEAlgorithm.h:2236
Base class for all classes that want to report their progress.
Definition ProgressLogger.h:28
int Int
Signed integer type.
Definition Types.h:72
uint32_t UInt32
Unsigned integer type (32bit)
Definition Types.h:33
uint64_t UInt64
Unsigned integer type (64bit)
Definition Types.h:47
size_t Size
Size type e.g. used as variable which can hold result of size()
Definition Types.h:97
std::vector< std::string > StringList
Vector of String.
Definition TypeAliases.h:39
Main OpenMS namespace.
Definition openswathalgo/include/OpenMS/OPENSWATHALGO/DATAACCESS/ISpectrumAccess.h:19
Slimmer structure as storing all scored candidates in PeptideHit objects takes too much space.
Definition ProSEAlgorithm.h:1037
static bool hasBetterScore(const AnnotatedHit_ &a, const AnnotatedHit_ &b)
Definition ProSEAlgorithm.h:1055
double score
main score
Definition ProSEAlgorithm.h:1044
AASequence sequence
Definition ProSEAlgorithm.h:1038
Result of a calibration pass.
Definition ProSEAlgorithm.h:1809
bool recalibrated() const
Definition ProSEAlgorithm.h:1818
MzRecalibration_ precursor_recalibration
the models subtracted from the spectra (calibration:recalibrate; inactive otherwise)
Definition ProSEAlgorithm.h:1816
const MzRecalibration_ * appliedFragmentRecalibration() const
the fragment model applyRecalibration_() subtracts from the peaks (nullptr: the peaks are not correct...
Definition ProSEAlgorithm.h:1820
MzRecalibration_ fragment_recalibration
Definition ProSEAlgorithm.h:1817
Running summary of the complete candidate pool of one spectrum.
Definition ProSEAlgorithm.h:1082
std::unordered_set< std::string > seen_candidates
Definition ProSEAlgorithm.h:1090
void add(double score)
Fold one freshly scored candidate into the summary.
Definition ProSEAlgorithm.h:1095
double deltaScore() const
Best minus runner-up over the full pool.
Definition ProSEAlgorithm.h:1105
double zScore() const
How much of an outlier the best score is within its own candidate pool.
Definition ProSEAlgorithm.h:1769
double correct(double mz) const
Definition ProSEAlgorithm.h:1781
double error(double mz) const
Definition ProSEAlgorithm.h:1774
An m/z error model of a run (calibration:recalibrate), fitted to the calibration PSMs and subtracted ...
Definition ProSEAlgorithm.h:1756
std::vector< Chunk > chunks
in RT order; empty: no correction
Definition ProSEAlgorithm.h:1758
double correct(double mz, double rt) const
mz without the modelled error
std::string toString() const
"ppm; rt <s>: <intercept> + <slope> mz (<points>) | ..." (empty: inactive)
double uncorrect(double corrected, double rt) const
the inverse of correct(): the m/z it maps to corrected
static MzRecalibration_ fit(const std::vector< double > &errors, const std::vector< double > &mzs, const std::vector< double > &rts, Size n_chunks, Size min_points, bool linear, bool ppm)
AtRT at(double rt) const
the model at rt (the chunks must not change while the result is used)
double intercept
Definition ProSEAlgorithm.h:1757
bool active() const
Definition ProSEAlgorithm.h:1760
double error(double mz, double rt) const
the modelled error at (mz, rt)
Definition ProSEAlgorithm.h:1757
The protein occurrences of the sequences of a search's hits (peptide:protein_mapping = index).
Definition ProSEAlgorithm.h:2033
std::vector< std::string_view > sequences
The unmodified hit sequences (views into the database), one entry each.
Definition ProSEAlgorithm.h:2037
std::string fallback_reason
Why PeptideIndexing has to run instead; empty if the mapping applies.
Definition ProSEAlgorithm.h:2043
Size find(std::string_view sequence) const
The entry of sequence, or sequences.size() if there is none.
Definition ProSEAlgorithm.h:2046
std::vector< std::vector< std::pair< UInt32, UInt32 > > > occurrences
Per entry: its occurrences {protein index, position}, ascending (PeptideIndexing's evidence order)
Definition ProSEAlgorithm.h:2039
std::vector< std::unordered_map< std::string_view, Size > > entries
Sequence -> entry, in SHARDS hash tables.
Definition ProSEAlgorithm.h:2041