112 template <
typename SpectrumT,
typename TransitionT>
118 std::vector<MSChromatogram > picked_chroms;
119 std::vector<MSChromatogram > smoothed_chroms;
130 !transition_group.
getTransition(native_id).isDetectingTransition() )
136 picker_.pickChromatogram(chromatogram, picked_chrom, smoothed_chrom);
138 picked_chroms.push_back(picked_chrom);
139 smoothed_chroms.push_back(smoothed_chrom);
147 SpectrumT picked_chrom, smoothed_chrom;
150 picker_.pickChromatogram(chromatogram, picked_chrom, smoothed_chrom);
151 picked_chrom.sortByIntensity();
152 picked_chroms.push_back(picked_chrom);
153 smoothed_chroms.push_back(smoothed_chrom);
161 int chr_idx, peak_idx, cnt = 0;
162 std::vector<MRMFeature> features;
165 chr_idx = -1; peak_idx = -1;
167 if (boundary_selection_method_ ==
"largest")
169 findLargestPeak(picked_chroms, chr_idx, peak_idx);
171 else if (boundary_selection_method_ ==
"widest")
173 findWidestPeakIndices(picked_chroms, chr_idx, peak_idx);
176 if (chr_idx == -1 && peak_idx == -1)
break;
179 MRMFeature mrm_feature = createMRMFeature(transition_group, picked_chroms, smoothed_chroms, chr_idx, peak_idx);
182 features.push_back(mrm_feature);
186 if (stop_after_feature_ > 0 && cnt > stop_after_feature_) {
break;}
195 for (
Size i = 0; i < features.size(); i++)
199 for (
Size j = 0; j < i; j++)
201 if ((
double)mrm_feature.
getMetaValue(
"leftWidth") >= (
double)features[j].getMetaValue(
"leftWidth") &&
214 template <
typename SpectrumT,
typename TransitionT>
216 std::vector<SpectrumT>& picked_chroms,
217 const std::vector<SpectrumT>& smoothed_chroms,
228 double peak_apex = picked_chroms[chr_idx][peak_idx].getRT();
229 LOG_DEBUG <<
"**** Creating MRMFeature for peak " << chr_idx <<
" " << peak_idx <<
" " <<
230 picked_chroms[chr_idx][peak_idx] <<
" with borders " << best_left <<
" " <<
231 best_right <<
" (" << best_right - best_left <<
")" << std::endl;
233 if (use_consensus_ && recalculate_peaks_)
236 recalculatePeakBorders_(picked_chroms, best_left, best_right, recalculate_peaks_max_z_);
237 if (peak_apex < best_left || peak_apex > best_right)
240 peak_apex = (best_left + best_right) / 2.0;
244 std::vector< double > left_edges;
245 std::vector< double > right_edges;
246 double min_left = best_left;
247 double max_right = best_right;
253 remove_overlapping_features(picked_chroms, best_left, best_right);
261 for (
Size k = 0;
k < picked_chroms.size();
k++)
263 double peak_apex_dist_min = std::numeric_limits<double>::max();
265 for (
Size i = 0; i < picked_chroms[
k].size(); i++)
271 if (pa_tmp.
apex_pos > 0.0 && std::fabs(pa_tmp.
apex_pos - peak_apex) < peak_apex_dist_min)
273 peak_apex_dist_min = std::fabs(pa_tmp.
apex_pos - peak_apex);
279 double l = best_left;
280 double r = best_right;
285 picked_chroms[
k][min_dist].setIntensity(0.0);
288 left_edges.push_back(l);
289 right_edges.push_back(r);
291 if (l < min_left) {min_left = l;}
292 if (r > max_right) {max_right = r;}
295 picked_chroms[chr_idx][peak_idx].setIntensity(0.0);
300 if (min_peak_width_ > 0.0 && std::fabs(best_right - best_left) < min_peak_width_)
305 if (compute_peak_quality_)
308 double qual = computeQuality_(transition_group, picked_chroms, chr_idx, best_left, best_right, outlier);
309 if (qual < min_qual_)
313 mrmFeature.setMetaValue(
"potentialOutlier", outlier);
314 mrmFeature.setMetaValue(
"initialPeakQuality", qual);
315 mrmFeature.setOverallQuality(qual);
323 SpectrumT master_peak_container;
324 const SpectrumT& ref_chromatogram = selectChromHelper_(transition_group, picked_chroms[chr_idx].getNativeID());
325 prepareMasterContainer_(ref_chromatogram, master_peak_container, min_left, max_right);
330 double total_intensity = 0;
double total_peak_apices = 0;
double total_xic = 0;
double total_mi = 0;
334 double local_left = best_left;
335 double local_right = best_right;
344 "When using non-censensus peak picker, all transitions need to be detecting transitions.");
346 local_left = left_edges[
k];
347 local_right = right_edges[
k];
350 const SpectrumT& chromatogram = selectChromHelper_(transition_group, transition_group.
getTransitions()[
k].getNativeID());
353 for (
typename SpectrumT::const_iterator it = chromatogram.begin(); it != chromatogram.end(); it++)
355 total_xic += it->getIntensity();
360 double transition_total_xic = 0;
362 for (
typename SpectrumT::const_iterator it = chromatogram.begin(); it != chromatogram.end(); it++)
364 transition_total_xic += it->getIntensity();
368 double transition_total_mi = 0;
369 if (compute_total_mi_)
371 std::vector<double> chrom_vect_id, chrom_vect_det;
372 for (
typename SpectrumT::const_iterator it = chromatogram.begin(); it != chromatogram.end(); it++)
374 chrom_vect_id.push_back(it->getIntensity());
378 int transition_total_mi_norm = 0;
383 const SpectrumT& chromatogram_det = selectChromHelper_(transition_group, transition_group.
getTransitions()[m].getNativeID());
384 chrom_vect_det.clear();
385 for (
typename SpectrumT::const_iterator it = chromatogram_det.begin(); it != chromatogram_det.end(); it++)
387 chrom_vect_det.push_back(it->getIntensity());
390 transition_total_mi_norm++;
393 if (transition_total_mi_norm > 0) { transition_total_mi /= transition_total_mi_norm; }
398 total_mi += transition_total_mi / transition_total_mi_norm;
402 SpectrumT used_chromatogram;
404 if (peak_integration_ ==
"original")
406 used_chromatogram = resampleChromatogram_(chromatogram, master_peak_container, local_left, local_right);
408 else if (peak_integration_ ==
"smoothed")
410 if (smoothed_chroms.size() <=
k)
413 "Tried to calculate peak area and height without any smoothed chromatograms");
415 used_chromatogram = resampleChromatogram_(smoothed_chroms[
k], master_peak_container, local_left, local_right);
420 String(
"Peak integration chromatogram ") + peak_integration_ +
" is not a valid method for MRMTransitionGroupPicker");
429 double peak_integral = pa.
area;
430 double peak_apex_int = pa.
height;
432 if (background_subtraction_ !=
"none")
434 double background{0};
435 double avg_noise_level{0};
436 if (background_subtraction_ ==
"original")
438 const double intensity_left = chromatogram.PosBegin(local_left)->getIntensity();
439 const double intensity_right = (chromatogram.PosEnd(local_right) - 1)->getIntensity();
440 const UInt n_points = std::distance(chromatogram.PosBegin(local_left), chromatogram.PosEnd(local_right));
441 avg_noise_level = (intensity_right + intensity_left) / 2;
442 background = avg_noise_level * n_points;
444 else if (background_subtraction_ ==
"exact")
447 background = pb.
area;
448 avg_noise_level = pb.
height;
450 peak_integral -= background;
451 peak_apex_int -= avg_noise_level;
452 if (peak_integral < 0) {peak_integral = 0;}
453 if (peak_apex_int < 0) {peak_apex_int = 0;}
456 f.
setMetaValue(
"noise_background_level", avg_noise_level);
459 f.
setRT(picked_chroms[chr_idx][peak_idx].getMZ());
465 f.
setMZ(chromatogram.getProduct().getMZ());
466 mrmFeature.setMZ(chromatogram.getPrecursor().getMZ());
468 if (chromatogram.metaValueExists(
"product_mz"))
470 f.
setMetaValue(
"MZ", chromatogram.getMetaValue(
"product_mz"));
471 f.
setMZ(chromatogram.getMetaValue(
"product_mz"));
474 f.
setMetaValue(
"native_id", chromatogram.getNativeID());
477 if (compute_total_mi_)
484 total_intensity += peak_integral;
485 total_peak_apices += peak_apex_int;
492 if (compute_peak_shape_metrics_)
511 mrmFeature.addFeature(f, chromatogram.getNativeID());
524 double local_left = best_left;
525 double local_right = best_right;
526 if (!use_consensus_ && right_edges.size() > prec_idx && left_edges.size() > prec_idx)
528 local_left = left_edges[prec_idx];
529 local_right = right_edges[prec_idx];
532 SpectrumT used_chromatogram;
534 if (peak_integration_ ==
"original")
536 used_chromatogram = resampleChromatogram_(chromatogram, master_peak_container, local_left, local_right);
539 else if (peak_integration_ ==
"smoothed" && smoothed_chroms.size() <= prec_idx)
542 "Tried to calculate peak area and height without any smoothed chromatograms for precursors");
544 else if (peak_integration_ ==
"smoothed")
546 used_chromatogram = resampleChromatogram_(smoothed_chroms[prec_idx], master_peak_container, local_left, local_right);
551 String(
"Peak integration chromatogram ") + peak_integration_ +
" is not a valid method for MRMTransitionGroupPicker");
560 double peak_integral = pa.
area;
561 double peak_apex_int = pa.
height;
563 if (background_subtraction_ !=
"none")
565 double background{0};
566 double avg_noise_level{0};
567 if ((peak_integration_ ==
"smoothed") && smoothed_chroms.size() <= prec_idx)
570 "Tried to calculate background estimation without any smoothed chromatograms");
572 else if (background_subtraction_ ==
"original")
574 const double intensity_left = chromatogram.PosBegin(local_left)->getIntensity();
575 const double intensity_right = (chromatogram.PosEnd(local_right) - 1)->getIntensity();
576 const UInt n_points = std::distance(chromatogram.PosBegin(local_left), chromatogram.PosEnd(local_right));
577 avg_noise_level = (intensity_right + intensity_left) / 2;
578 background = avg_noise_level * n_points;
580 else if (background_subtraction_ ==
"exact")
583 background = pb.
area;
584 avg_noise_level = pb.
height;
586 peak_integral -= background;
587 peak_apex_int -= avg_noise_level;
588 if (peak_integral < 0) {peak_integral = 0;}
589 if (peak_apex_int < 0) {peak_apex_int = 0;}
592 f.
setMetaValue(
"noise_background_level", avg_noise_level);
595 f.
setMZ(chromatogram.getPrecursor().getMZ());
596 if (
k == 0) {mrmFeature.setMZ(chromatogram.getPrecursor().getMZ());}
598 if (chromatogram.metaValueExists(
"precursor_mz"))
600 f.
setMZ(chromatogram.getMetaValue(
"precursor_mz"));
601 if (
k == 0) {mrmFeature.setMZ(chromatogram.getMetaValue(
"precursor_mz"));}
604 f.
setRT(picked_chroms[chr_idx][peak_idx].getMZ());
609 f.
setMetaValue(
"native_id", chromatogram.getNativeID());
614 total_intensity += peak_integral;
617 mrmFeature.addPrecursorFeature(f, chromatogram.getNativeID());
620 mrmFeature.setRT(peak_apex);
621 mrmFeature.setIntensity(total_intensity);
623 mrmFeature.setMetaValue(
"leftWidth", best_left);
624 mrmFeature.setMetaValue(
"rightWidth", best_right);
625 mrmFeature.setMetaValue(
"total_xic", total_xic);
626 if (compute_total_mi_)
628 mrmFeature.setMetaValue(
"total_mi", total_mi);
630 mrmFeature.setMetaValue(
"peak_apices_sum", total_peak_apices);
632 mrmFeature.ensureUniqueId();
649 template <
typename SpectrumT>
654 for (
Size k = 0;
k < picked_chroms.size();
k++)
656 for (
Size i = 0; i < picked_chroms[
k].size(); i++)
658 if (picked_chroms[
k][i].getMZ() >= best_left && picked_chroms[
k][i].getMZ() <= best_right)
662 picked_chroms[
k][i].setIntensity(0.0);
668 for (
Size k = 0;
k < picked_chroms.size();
k++)
670 for (
Size i = 0; i < picked_chroms[
k].size(); i++)
672 if (picked_chroms[
k][i].getIntensity() <= 0.0) {
continue; }
676 if ((left > best_left && left < best_right)
677 || (right > best_left && right < best_right))
681 picked_chroms[
k][i].setIntensity(0.0);
688 void findLargestPeak(
const std::vector<MSChromatogram >& picked_chroms,
int& chr_idx,
int& peak_idx);
698 void findWidestPeakIndices(
const std::vector<MSChromatogram>& picked_chroms,
Int& chrom_idx,
Int& point_idx)
const;
703 void updateMembers_()
override;
711 template <
typename SpectrumT,
typename TransitionT>
724 throw Exception::IllegalArgument(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION,
"Did not find chromatogram for id '" + native_id +
"'.");
744 template <
typename SpectrumT,
typename TransitionT>
746 const std::vector<SpectrumT>& picked_chroms,
748 const double best_left,
749 const double best_right,
755 double resample_boundary = resample_boundary_;
756 SpectrumT master_peak_container;
757 const SpectrumT& ref_chromatogram = selectChromHelper_(transition_group, picked_chroms[chr_idx].getNativeID());
758 prepareMasterContainer_(ref_chromatogram, master_peak_container, best_left - resample_boundary, best_right + resample_boundary);
759 std::vector<std::vector<double> > all_ints;
760 for (
Size k = 0;
k < picked_chroms.size();
k++)
762 const SpectrumT chromatogram = selectChromHelper_(transition_group, picked_chroms[
k].getNativeID());
763 const SpectrumT used_chromatogram = resampleChromatogram_(chromatogram,
764 master_peak_container, best_left - resample_boundary, best_right + resample_boundary);
766 std::vector<double> int_here;
767 for (
Size i = 0; i < used_chromatogram.size(); i++)
769 int_here.push_back(used_chromatogram[i].getIntensity());
771 all_ints.push_back(int_here);
775 std::vector<double> mean_shapes;
776 std::vector<double> mean_coel;
777 for (
Size k = 0;
k < all_ints.size();
k++)
779 std::vector<double> shapes;
780 std::vector<double> coel;
781 for (
Size i = 0; i < all_ints.size(); i++)
783 if (i ==
k) {
continue;}
785 all_ints[
k], all_ints[i], boost::numeric_cast<int>(all_ints[i].size()), 1);
791 shapes.push_back(res_shape);
792 coel.push_back(res_coelution);
798 msc = std::for_each(shapes.begin(), shapes.end(), msc);
799 double shapes_mean = msc.
mean();
800 msc = std::for_each(coel.begin(), coel.end(), msc);
801 double coel_mean = msc.
mean();
805 mean_shapes.push_back(shapes_mean);
806 mean_coel.push_back(coel_mean);
812 int min_index_shape = std::distance(mean_shapes.begin(), std::min_element(mean_shapes.begin(), mean_shapes.end()));
813 int max_index_coel = std::distance(mean_coel.begin(), std::max_element(mean_coel.begin(), mean_coel.end()));
816 int missing_peaks = 0;
817 int multiple_peaks = 0;
820 std::vector<double> left_borders;
821 std::vector<double> right_borders;
822 for (
Size k = 0;
k < picked_chroms.size();
k++)
831 for (
Size i = 0; i < picked_chroms[
k].size(); i++)
833 if (picked_chroms[
k][i].getMZ() >= best_left && picked_chroms[
k][i].getMZ() <= best_right)
836 if (picked_chroms[
k][i].getIntensity() > max_int)
838 max_int = picked_chroms[
k][i].getIntensity() > max_int;
845 if (l_tmp > 0.0) left_borders.push_back(l_tmp);
846 if (r_tmp > 0.0) right_borders.push_back(r_tmp);
848 if (pfound == 0) missing_peaks++;
849 if (pfound > 1) multiple_peaks++;
854 LOG_DEBUG <<
" Overall found missing : " << missing_peaks <<
" and multiple : " << multiple_peaks << std::endl;
860 if (min_index_shape == max_index_coel)
862 LOG_DEBUG <<
" element " << min_index_shape <<
" is a candidate for removal ... " << std::endl;
863 outlier =
String(picked_chroms[min_index_shape].getNativeID());
875 double shape_score = std::accumulate(mean_shapes.begin(), mean_shapes.end(), 0.0) / mean_shapes.size();
876 double coel_score = std::accumulate(mean_coel.begin(), mean_coel.end(), 0.0) / mean_coel.size();
877 coel_score = (coel_score - 1.0) / 2.0;
879 double score = shape_score - coel_score - 1.0 * missing_peaks / picked_chroms.size();
881 LOG_DEBUG <<
" computed score " << score <<
" (from " << shape_score <<
882 " - " << coel_score <<
" - " << 1.0 * missing_peaks / picked_chroms.size() <<
")" << std::endl;
896 template <
typename SpectrumT>
897 void recalculatePeakBorders_(
const std::vector<SpectrumT>& picked_chroms,
double& best_left,
double& best_right,
double max_z)
903 std::vector<double> left_borders;
904 std::vector<double> right_borders;
905 for (
Size k = 0;
k < picked_chroms.size();
k++)
910 for (
Size i = 0; i < picked_chroms[
k].size(); i++)
912 if (picked_chroms[
k][i].getMZ() >= best_left && picked_chroms[
k][i].getMZ() <= best_right)
924 left_borders.push_back(left);
925 right_borders.push_back(right);
926 LOG_DEBUG <<
" * " <<
k <<
" left boundary " << left_borders.back() <<
" with int " << max_int << std::endl;
927 LOG_DEBUG <<
" * " <<
k <<
" right boundary " << right_borders.back() <<
" with int " << max_int << std::endl;
932 if (right_borders.empty())
950 mean = std::accumulate(right_borders.begin(), right_borders.end(), 0.0) / (
double) right_borders.size();
951 stdev = std::sqrt(std::inner_product(right_borders.begin(), right_borders.end(), right_borders.begin(), 0.0)
952 / right_borders.size() -
mean *
mean);
953 std::sort(right_borders.begin(), right_borders.end());
955 LOG_DEBUG <<
" - Recalculating right peak boundaries " <<
mean <<
" mean / best " 956 << best_right <<
" std " << stdev <<
" : " << std::fabs(best_right -
mean) / stdev
957 <<
" coefficient of variation" << std::endl;
960 if (std::fabs(best_right -
mean) / stdev > max_z)
962 best_right = right_borders[right_borders.size() / 2];
963 LOG_DEBUG <<
" - Setting right boundary to " << best_right << std::endl;
967 mean = std::accumulate(left_borders.begin(), left_borders.end(), 0.0) / (
double) left_borders.size();
968 stdev = std::sqrt(std::inner_product(left_borders.begin(), left_borders.end(), left_borders.begin(), 0.0)
969 / left_borders.size() -
mean *
mean);
970 std::sort(left_borders.begin(), left_borders.end());
972 LOG_DEBUG <<
" - Recalculating left peak boundaries " <<
mean <<
" mean / best " 973 << best_left <<
" std " << stdev <<
" : " << std::fabs(best_left -
mean) / stdev
974 <<
" coefficient of variation" << std::endl;
977 if (std::fabs(best_left -
mean) / stdev > max_z)
979 best_left = left_borders[left_borders.size() / 2];
980 LOG_DEBUG <<
" - Setting left boundary to " << best_left << std::endl;
1002 template <
typename SpectrumT>
1004 SpectrumT& master_peak_container,
double left_boundary,
double right_boundary)
1011 typename SpectrumT::const_iterator begin = ref_chromatogram.begin();
1012 while (begin != ref_chromatogram.end() && begin->getMZ() < left_boundary) {begin++; }
1013 if (begin != ref_chromatogram.begin()) {begin--; }
1015 typename SpectrumT::const_iterator end = begin;
1016 while (end != ref_chromatogram.end() && end->getMZ() < right_boundary) {end++; }
1017 if (end != ref_chromatogram.end()) {end++; }
1020 master_peak_container.resize(distance(begin, end));
1021 typename SpectrumT::iterator it = master_peak_container.begin();
1022 for (
typename SpectrumT::const_iterator chrom_it = begin; chrom_it != end; chrom_it++, it++)
1024 it->setMZ(chrom_it->getMZ());
1038 template <
typename SpectrumT>
1040 const SpectrumT& master_peak_container,
double left_boundary,
double right_boundary)
1045 typename SpectrumT::const_iterator begin = chromatogram.begin();
1046 while (begin != chromatogram.end() && begin->getMZ() < left_boundary) {begin++;}
1047 if (begin != chromatogram.begin()) {begin--;}
1049 typename SpectrumT::const_iterator end = begin;
1050 while (end != chromatogram.end() && end->getMZ() < right_boundary) {end++;}
1051 if (end != chromatogram.end()) {end++;}
1053 SpectrumT resampled_peak_container = master_peak_container;
1055 lresampler.
raster(begin, end, resampled_peak_container.begin(), resampled_peak_container.end());
1057 return resampled_peak_container;
double total_width
Definition: PeakIntegrator.h:169
bool hasTransition(String key) const
Definition: MRMTransitionGroup.h:158
Definition: PeakPickerMRM.h:83
const SpectrumT & selectChromHelper_(const MRMTransitionGroup< SpectrumT, TransitionT > &transition_group, const String &native_id)
Select matching precursor or fragment ion chromatogram.
Definition: MRMTransitionGroupPicker.h:712
double min_qual_
Definition: MRMTransitionGroupPicker.h:1071
String background_subtraction_
Definition: MRMTransitionGroupPicker.h:1064
double recalculate_peaks_max_z_
Definition: MRMTransitionGroupPicker.h:1076
bool use_consensus_
Definition: MRMTransitionGroupPicker.h:1067
A more convenient string class.
Definition: String.h:58
bool compute_peak_quality_
Definition: MRMTransitionGroupPicker.h:1068
void setMZ(CoordinateType coordinate)
Mutable access to the m/z coordinate (index 1)
Definition: Peak2D.h:202
ChromatogramType & getChromatogram(const String &key)
Definition: MRMTransitionGroup.h:197
double mean() const
Definition: StatsHelpers.h:207
The representation of a chromatogram.
Definition: MSChromatogram.h:54
const std::vector< TransitionType > & getTransitions() const
Definition: MRMTransitionGroup.h:142
#define OPENMS_PRECONDITION(condition, message)
Precondition macro.
Definition: openms/include/OpenMS/CONCEPT/Macros.h:106
Definition: PeakIntegrator.h:110
unsigned int UInt
Unsigned integer type.
Definition: Types.h:94
OPENSWATHALGO_DLLAPI XCorrArrayType::const_iterator xcorrArrayGetMaxPeak(const XCorrArrayType &array)
Find best peak in an cross-correlation (highest apex)
Int points_across_half_height
Definition: PeakIntegrator.h:211
double start_position_at_50
Definition: PeakIntegrator.h:153
The PeakPickerMRM finds peaks a single chromatogram.
Definition: PeakPickerMRM.h:68
PeakIntegrator pi_
Definition: MRMTransitionGroupPicker.h:1087
double width_at_5
Definition: PeakIntegrator.h:133
double slope_of_baseline
Definition: PeakIntegrator.h:198
double start_position_at_5
Definition: PeakIntegrator.h:145
int stop_after_feature_
Definition: MRMTransitionGroupPicker.h:1073
Main OpenMS namespace.
Definition: FeatureDeconvolution.h:46
const std::vector< ConvexHull2D > & getConvexHulls() const
Non-mutable access to the convex hulls.
IntensityType getIntensity() const
Definition: Peak2D.h:166
String peak_integration_
Definition: MRMTransitionGroupPicker.h:1063
A 2-dimensional hull representation in [counter]clockwise direction - depending on axis labelling...
Definition: ConvexHull2D.h:72
#define LOG_DEBUG
Macro for general debugging information.
Definition: LogStream.h:460
static double mean(IteratorType begin, IteratorType end)
Calculates the mean of a range of values.
Definition: StatisticFunctions.h:133
void setIntensity(IntensityType intensity)
Non-mutable access to the data point intensity (height)
Definition: Peak2D.h:172
void addFeature(const MRMFeature &feature)
Definition: MRMTransitionGroup.h:276
double start_position_at_10
Definition: PeakIntegrator.h:149
void sortByIntensity(bool reverse=false)
Lexicographically sorts the peaks by their intensity.
double min_peak_width_
Definition: MRMTransitionGroupPicker.h:1075
double resample_boundary_
Definition: MRMTransitionGroupPicker.h:1077
bool hasPrecursorChromatogram(const String &key) const
Definition: MRMTransitionGroup.h:243
bool isInternallyConsistent() const
Check whether internal state is consistent, e.g. same number of chromatograms and transitions are pre...
Definition: MRMTransitionGroup.h:287
A method or algorithm argument contains illegal values.
Definition: Exception.h:648
void setRT(CoordinateType coordinate)
Mutable access to the RT coordinate (index 0)
Definition: Peak2D.h:214
The MRMTransitionGroupPicker finds peaks in chromatograms that belong to the same precursors...
Definition: MRMTransitionGroupPicker.h:79
double end_position_at_10
Definition: PeakIntegrator.h:161
bool recalculate_peaks_
Definition: MRMTransitionGroupPicker.h:1065
ConvexHull2D::PointArrayType hull_points
Definition: PeakIntegrator.h:102
void setQuality(Size index, QualityType q)
Set the quality in dimension c.
std::vector< ChromatogramType > & getChromatograms()
Definition: MRMTransitionGroup.h:174
double width_at_50
Definition: PeakIntegrator.h:141
void raster(SpecT &container)
Applies the resampling algorithm to a container (MSSpectrum or MSChromatogram).
Definition: LinearResamplerAlign.h:80
bool compute_peak_shape_metrics_
Definition: MRMTransitionGroupPicker.h:1069
Linear Resampling of raw data with alignment.
Definition: LinearResamplerAlign.h:57
void prepareMasterContainer_(const SpectrumT &ref_chromatogram, SpectrumT &master_peak_container, double left_boundary, double right_boundary)
Create an empty master peak container that has the correct mz / RT values set.
Definition: MRMTransitionGroupPicker.h:1003
void setHullPoints(const PointArrayType &points)
accessor for the outer(!) points (no checking is performed if this is actually a convex hull) ...
const String & getTransitionGroupID() const
Definition: MRMTransitionGroup.h:130
bool chromatogramIdsMatch() const
Ensure that chromatogram native ids match their keys in the map.
Definition: MRMTransitionGroup.h:296
Int points_across_baseline
Definition: PeakIntegrator.h:207
Definition: PeakPickerMRM.h:83
An LC-MS feature.
Definition: Feature.h:70
functor to compute the mean and stddev of sequence using the std::foreach algorithm ...
Definition: StatsHelpers.h:169
double end_position_at_5
Definition: PeakIntegrator.h:157
double area
Definition: PeakIntegrator.h:90
bool hasChromatogram(const String &key) const
Definition: MRMTransitionGroup.h:192
Definition: PeakPickerMRM.h:83
Definition: PeakIntegrator.h:128
double asymmetry_factor
Definition: PeakIntegrator.h:193
void setOverallQuality(QualityType q)
Set the overall quality.
double end_position_at_50
Definition: PeakIntegrator.h:165
SpectrumT resampleChromatogram_(const SpectrumT &chromatogram, const SpectrumT &master_peak_container, double left_boundary, double right_boundary)
Resample a container at the positions indicated by the master peak container.
Definition: MRMTransitionGroupPicker.h:1039
double height
Definition: PeakIntegrator.h:119
double width_at_10
Definition: PeakIntegrator.h:137
const String & getNativeID() const
returns the native identifier for the spectrum, used by the acquisition software. ...
size_t Size
Size type e.g. used as variable which can hold result of size()
Definition: Types.h:127
ChromatogramType & getPrecursorChromatogram(const String &key)
Definition: MRMTransitionGroup.h:248
void pickTransitionGroup(MRMTransitionGroup< SpectrumT, TransitionT > &transition_group)
Pick a group of chromatograms belonging to the same peptide.
Definition: MRMTransitionGroupPicker.h:113
Compute the area, background and shape metrics of a peak.
Definition: PeakIntegrator.h:72
MRMFeature createMRMFeature(const MRMTransitionGroup< SpectrumT, TransitionT > &transition_group, std::vector< SpectrumT > &picked_chroms, const std::vector< SpectrumT > &smoothed_chroms, const int chr_idx, const int peak_idx)
Create feature from a vector of chromatograms and a specified peak.
Definition: MRMTransitionGroupPicker.h:215
PeakPickerMRM picker_
Definition: MRMTransitionGroupPicker.h:1086
Definition: PeakIntegrator.h:85
double area
Definition: PeakIntegrator.h:115
bool use_precursors_
Definition: MRMTransitionGroupPicker.h:1066
bool compute_total_mi_
Definition: MRMTransitionGroupPicker.h:1070
double apex_pos
Definition: PeakIntegrator.h:98
void recalculatePeakBorders_(const std::vector< SpectrumT > &picked_chroms, double &best_left, double &best_right, double max_z)
Recalculate the borders of the peak.
Definition: MRMTransitionGroupPicker.h:897
OPENSWATHALGO_DLLAPI XCorrArrayType normalizedCrossCorrelation(std::vector< double > &data1, std::vector< double > &data2, const int &maxdelay, const int &lag)
A base class for all classes handling default parameters.
Definition: DefaultParamHandler.h:91
void remove_overlapping_features(std::vector< SpectrumT > &picked_chroms, double best_left, double best_right)
Remove overlapping features.
Definition: MRMTransitionGroupPicker.h:650
String boundary_selection_method_
Which method to use for selecting peaks' boundaries.
Definition: MRMTransitionGroupPicker.h:1084
std::vector< ChromatogramType > & getPrecursorChromatograms()
Definition: MRMTransitionGroup.h:215
double stop_after_intensity_ratio_
Definition: MRMTransitionGroupPicker.h:1074
A multi-chromatogram MRM feature.
Definition: MRMFeature.h:49
double computeQuality_(const MRMTransitionGroup< SpectrumT, TransitionT > &transition_group, const std::vector< SpectrumT > &picked_chroms, const int chr_idx, const double best_left, const double best_right, String &outlier)
Compute transition group quality (higher score is better)
Definition: MRMTransitionGroupPicker.h:745
double height
Definition: PeakIntegrator.h:94
int Int
Signed integer type.
Definition: Types.h:102
double tailing_factor
Definition: PeakIntegrator.h:183
OPENSWATHALGO_DLLAPI double rankedMutualInformation(std::vector< double > &data1, std::vector< double > &data2)
const TransitionType & getTransition(String key)
Definition: MRMTransitionGroup.h:163
double baseline_delta_2_height
Definition: PeakIntegrator.h:203