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() )
137 picker_.pickChromatogram(chromatogram, picked_chrom, smoothed_chrom);
139 picked_chroms.push_back(std::move(picked_chrom));
140 smoothed_chroms.push_back(std::move(smoothed_chrom));
148 SpectrumT picked_chrom, smoothed_chrom;
151 picker_.pickChromatogram(chromatogram, picked_chrom, smoothed_chrom);
152 picked_chrom.sortByIntensity();
153 picked_chroms.push_back(picked_chrom);
154 smoothed_chroms.push_back(smoothed_chrom);
162 int chr_idx, peak_idx, cnt = 0;
163 std::vector<MRMFeature> features;
166 chr_idx = -1; peak_idx = -1;
168 if (boundary_selection_method_ ==
"largest")
170 findLargestPeak(picked_chroms, chr_idx, peak_idx);
172 else if (boundary_selection_method_ ==
"widest")
174 findWidestPeakIndices(picked_chroms, chr_idx, peak_idx);
177 if (chr_idx == -1 && peak_idx == -1)
179 OPENMS_LOG_DEBUG <<
"**** No more peaks left. Nr. chroms: " << picked_chroms.size() << std::endl;
184 MRMFeature mrm_feature = createMRMFeature(transition_group, picked_chroms, smoothed_chroms, chr_idx, peak_idx);
185 double total_xic = 0;
190 features.push_back(std::move(mrm_feature));
194 if (stop_after_feature_ > 0 && cnt > stop_after_feature_) {
198 if (intensity > 0 && intensity / total_xic < stop_after_intensity_ratio_)
200 OPENMS_LOG_DEBUG <<
"**** Minimum intensity ratio reached. Nr. chroms: " << picked_chroms.size() << std::endl;
206 for (
Size i = 0; i < features.size(); i++)
210 for (
Size j = 0; j < i; j++)
212 if ((
double)mrm_feature.
getMetaValue(
"leftWidth") >= (
double)features[j].getMetaValue(
"leftWidth") &&
213 (
double)mrm_feature.
getMetaValue(
"rightWidth") <= (
double)features[j].getMetaValue(
"rightWidth") )
225 template <
typename SpectrumT,
typename TransitionT>
227 std::vector<SpectrumT>& picked_chroms,
228 const std::vector<SpectrumT>& smoothed_chroms,
239 double peak_apex = picked_chroms[chr_idx][peak_idx].getRT();
240 OPENMS_LOG_DEBUG <<
"**** Creating MRMFeature for peak " << peak_idx <<
" in chrom. " << chr_idx <<
" with " <<
241 picked_chroms[chr_idx][peak_idx] <<
" and borders " << best_left <<
" " <<
242 best_right <<
" (" << best_right - best_left <<
")" << std::endl;
244 if (use_consensus_ && recalculate_peaks_)
247 recalculatePeakBorders_(picked_chroms, best_left, best_right, recalculate_peaks_max_z_);
248 if (peak_apex < best_left || peak_apex > best_right)
251 peak_apex = (best_left + best_right) / 2.0;
255 std::vector< double > left_edges;
256 std::vector< double > right_edges;
257 double min_left = best_left;
258 double max_right = best_right;
264 remove_overlapping_features(picked_chroms, best_left, best_right);
268 pickApex(picked_chroms, best_left, best_right, peak_apex,
269 min_left, max_right, left_edges, right_edges);
272 picked_chroms[chr_idx][peak_idx].setIntensity(0.0);
277 if (min_peak_width_ > 0.0 && std::fabs(best_right - best_left) < min_peak_width_)
282 if (compute_peak_quality_)
285 double qual = computeQuality_(transition_group, picked_chroms, chr_idx, best_left, best_right, outlier);
286 if (qual < min_qual_)
300 SpectrumT master_peak_container;
301 const SpectrumT& ref_chromatogram = selectChromHelper_(transition_group, picked_chroms[chr_idx].getNativeID());
302 prepareMasterContainer_(ref_chromatogram, master_peak_container, min_left, max_right);
307 double total_intensity = 0;
double total_peak_apices = 0;
double total_xic = 0;
double total_mi = 0;
308 pickFragmentChromatograms(transition_group, picked_chroms, mrmFeature, smoothed_chroms,
309 best_left, best_right, use_consensus_,
310 total_intensity, total_xic, total_mi, total_peak_apices,
311 master_peak_container, left_edges, right_edges,
316 pickPrecursorChromatograms(transition_group,
317 picked_chroms, mrmFeature, smoothed_chroms,
318 best_left, best_right, use_consensus_,
319 total_intensity, master_peak_container, left_edges, right_edges,
322 mrmFeature.
setRT(peak_apex);
328 if (compute_total_mi_)
332 mrmFeature.
setMetaValue(
"peak_apices_sum", total_peak_apices);
350 template <
typename SpectrumT>
351 void pickApex(std::vector<SpectrumT>& picked_chroms,
352 const double best_left,
const double best_right,
const double peak_apex,
353 double &min_left,
double &max_right,
354 std::vector< double > & left_edges, std::vector< double > & right_edges)
356 for (
Size k = 0;
k < picked_chroms.size();
k++)
358 double peak_apex_dist_min = std::numeric_limits<double>::max();
360 for (
Size i = 0; i < picked_chroms[
k].size(); i++)
366 if (pa_tmp.
apex_pos > 0.0 && std::fabs(pa_tmp.
apex_pos - peak_apex) < peak_apex_dist_min)
368 peak_apex_dist_min = std::fabs(pa_tmp.
apex_pos - peak_apex);
374 double l = best_left;
375 double r = best_right;
380 picked_chroms[
k][min_dist].setIntensity(0.0);
383 left_edges.push_back(l);
384 right_edges.push_back(r);
386 if (l < min_left) {min_left = l;}
387 if (r > max_right) {max_right = r;}
391 template <
typename SpectrumT,
typename TransitionT>
393 const std::vector<SpectrumT>& picked_chroms,
395 const std::vector<SpectrumT>& smoothed_chroms,
396 const double best_left,
const double best_right,
397 const bool use_consensus_,
398 double & total_intensity,
401 double & total_peak_apices,
402 const SpectrumT & master_peak_container,
403 const std::vector< double > & left_edges,
404 const std::vector< double > & right_edges,
411 double local_left = best_left;
412 double local_right = best_right;
421 "When using non-consensus peak picker, all transitions need to be detecting transitions.");
423 local_left = left_edges[
k];
424 local_right = right_edges[
k];
427 const SpectrumT& chromatogram = selectChromHelper_(transition_group, transition_group.
getTransitions()[
k].getNativeID());
430 for (
typename SpectrumT::const_iterator it = chromatogram.begin(); it != chromatogram.end(); it++)
432 total_xic += it->getIntensity();
437 double transition_total_xic = 0;
439 for (
typename SpectrumT::const_iterator it = chromatogram.begin(); it != chromatogram.end(); it++)
441 transition_total_xic += it->getIntensity();
445 double transition_total_mi = 0;
446 if (compute_total_mi_)
448 std::vector<double> chrom_vect_id, chrom_vect_det;
449 for (
typename SpectrumT::const_iterator it = chromatogram.begin(); it != chromatogram.end(); it++)
451 chrom_vect_id.push_back(it->getIntensity());
455 int transition_total_mi_norm = 0;
460 const SpectrumT& chromatogram_det = selectChromHelper_(transition_group, transition_group.
getTransitions()[m].getNativeID());
461 chrom_vect_det.clear();
462 for (
typename SpectrumT::const_iterator it = chromatogram_det.begin(); it != chromatogram_det.end(); it++)
464 chrom_vect_det.push_back(it->getIntensity());
467 transition_total_mi_norm++;
470 if (transition_total_mi_norm > 0) { transition_total_mi /= transition_total_mi_norm; }
475 total_mi += transition_total_mi / transition_total_mi_norm;
479 SpectrumT used_chromatogram;
481 if (peak_integration_ ==
"original")
483 used_chromatogram = resampleChromatogram_(chromatogram, master_peak_container, local_left, local_right);
485 else if (peak_integration_ ==
"smoothed")
487 if (smoothed_chroms.size() <=
k)
490 "Tried to calculate peak area and height without any smoothed chromatograms");
492 used_chromatogram = resampleChromatogram_(smoothed_chroms[
k], master_peak_container, local_left, local_right);
497 String(
"Peak integration chromatogram ") + peak_integration_ +
" is not a valid method for MRMTransitionGroupPicker");
506 double peak_integral = pa.
area;
507 double peak_apex_int = pa.
height;
509 if (background_subtraction_ !=
"none")
511 double background{0};
512 double avg_noise_level{0};
513 if (background_subtraction_ ==
"original")
515 const double intensity_left = chromatogram.PosBegin(local_left)->getIntensity();
516 const double intensity_right = (chromatogram.PosEnd(local_right) - 1)->getIntensity();
517 const UInt n_points = std::distance(chromatogram.PosBegin(local_left), chromatogram.PosEnd(local_right));
518 avg_noise_level = (intensity_right + intensity_left) / 2;
519 background = avg_noise_level * n_points;
521 else if (background_subtraction_ ==
"exact")
524 background = pb.
area;
525 avg_noise_level = pb.
height;
527 peak_integral -= background;
528 peak_apex_int -= avg_noise_level;
529 if (peak_integral < 0) {peak_integral = 0;}
530 if (peak_apex_int < 0) {peak_apex_int = 0;}
533 f.
setMetaValue(
"noise_background_level", avg_noise_level);
536 f.
setRT(picked_chroms[chr_idx][peak_idx].getMZ());
542 f.
setMZ(chromatogram.getProduct().getMZ());
543 mrmFeature.
setMZ(chromatogram.getPrecursor().getMZ());
545 if (chromatogram.metaValueExists(
"product_mz"))
547 f.
setMetaValue(
"MZ", chromatogram.getMetaValue(
"product_mz"));
548 f.
setMZ(chromatogram.getMetaValue(
"product_mz"));
551 f.
setMetaValue(
"native_id", chromatogram.getNativeID());
554 if (compute_total_mi_)
561 total_intensity += peak_integral;
562 total_peak_apices += peak_apex_int;
569 if (compute_peak_shape_metrics_)
588 mrmFeature.
addFeature(f, chromatogram.getNativeID());
592 template <
typename SpectrumT,
typename TransitionT>
594 const std::vector<SpectrumT>& picked_chroms,
596 const std::vector<SpectrumT>& smoothed_chroms,
597 const double best_left,
const double best_right,
598 const bool use_consensus_,
599 double & total_intensity,
600 const SpectrumT & master_peak_container,
601 const std::vector< double > & left_edges,
602 const std::vector< double > & right_edges,
614 double local_left = best_left;
615 double local_right = best_right;
616 if (!use_consensus_ && right_edges.size() > prec_idx && left_edges.size() > prec_idx)
618 local_left = left_edges[prec_idx];
619 local_right = right_edges[prec_idx];
622 SpectrumT used_chromatogram;
624 if (peak_integration_ ==
"original")
626 used_chromatogram = resampleChromatogram_(chromatogram, master_peak_container, local_left, local_right);
629 else if (peak_integration_ ==
"smoothed" && smoothed_chroms.size() <= prec_idx)
632 "Tried to calculate peak area and height without any smoothed chromatograms for precursors");
634 else if (peak_integration_ ==
"smoothed")
636 used_chromatogram = resampleChromatogram_(smoothed_chroms[prec_idx], master_peak_container, local_left, local_right);
641 String(
"Peak integration chromatogram ") + peak_integration_ +
" is not a valid method for MRMTransitionGroupPicker");
650 double peak_integral = pa.
area;
651 double peak_apex_int = pa.
height;
653 if (background_subtraction_ !=
"none")
655 double background{0};
656 double avg_noise_level{0};
657 if ((peak_integration_ ==
"smoothed") && smoothed_chroms.size() <= prec_idx)
660 "Tried to calculate background estimation without any smoothed chromatograms");
662 else if (background_subtraction_ ==
"original")
664 const double intensity_left = chromatogram.PosBegin(local_left)->getIntensity();
665 const double intensity_right = (chromatogram.PosEnd(local_right) - 1)->getIntensity();
666 const UInt n_points = std::distance(chromatogram.PosBegin(local_left), chromatogram.PosEnd(local_right));
667 avg_noise_level = (intensity_right + intensity_left) / 2;
668 background = avg_noise_level * n_points;
670 else if (background_subtraction_ ==
"exact")
673 background = pb.
area;
674 avg_noise_level = pb.
height;
676 peak_integral -= background;
677 peak_apex_int -= avg_noise_level;
678 if (peak_integral < 0) {peak_integral = 0;}
679 if (peak_apex_int < 0) {peak_apex_int = 0;}
682 f.
setMetaValue(
"noise_background_level", avg_noise_level);
685 f.
setMZ(chromatogram.getPrecursor().getMZ());
686 if (
k == 0) {mrmFeature.
setMZ(chromatogram.getPrecursor().getMZ());}
688 if (chromatogram.metaValueExists(
"precursor_mz"))
690 f.
setMZ(chromatogram.getMetaValue(
"precursor_mz"));
691 if (
k == 0) {mrmFeature.
setMZ(chromatogram.getMetaValue(
"precursor_mz"));}
694 f.
setRT(picked_chroms[chr_idx][peak_idx].getMZ());
699 f.
setMetaValue(
"native_id", chromatogram.getNativeID());
704 total_intensity += peak_integral;
724 template <
typename SpectrumT>
728 Size count_inside = 0;
729 for (
Size k = 0;
k < picked_chroms.size();
k++)
731 for (
Size i = 0; i < picked_chroms[
k].size(); i++)
733 if (picked_chroms[
k][i].getMZ() >= best_left && picked_chroms[
k][i].getMZ() <= best_right)
735 picked_chroms[
k][i].setIntensity(0.0);
741 Size count_overlap = 0;
743 for (
Size k = 0;
k < picked_chroms.size();
k++)
745 for (
Size i = 0; i < picked_chroms[
k].size(); i++)
747 if (picked_chroms[
k][i].getIntensity() <= 0.0) {
continue; }
751 if ((left > best_left && left < best_right)
752 || (right > best_left && right < best_right))
754 picked_chroms[
k][i].setIntensity(0.0);
759 OPENMS_LOG_DEBUG <<
" ** Removed " << count_inside <<
" peaks enclosed in and " <<
760 count_overlap <<
" peaks overlapping with added feature." << std::endl;
764 void findLargestPeak(
const std::vector<MSChromatogram >& picked_chroms,
int& chr_idx,
int& peak_idx);
787 template <
typename SpectrumT,
typename TransitionT>
800 throw Exception::IllegalArgument(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION,
"Did not find chromatogram for id '" + native_id +
"'.");
820 template <
typename SpectrumT,
typename TransitionT>
822 const std::vector<SpectrumT>& picked_chroms,
824 const double best_left,
825 const double best_right,
831 double resample_boundary = resample_boundary_;
832 SpectrumT master_peak_container;
833 const SpectrumT& ref_chromatogram = selectChromHelper_(transition_group, picked_chroms[chr_idx].getNativeID());
834 prepareMasterContainer_(ref_chromatogram, master_peak_container, best_left - resample_boundary, best_right + resample_boundary);
835 std::vector<std::vector<double> > all_ints;
836 for (
Size k = 0;
k < picked_chroms.size();
k++)
838 const SpectrumT& chromatogram = selectChromHelper_(transition_group, picked_chroms[
k].getNativeID());
839 const SpectrumT used_chromatogram = resampleChromatogram_(chromatogram,
840 master_peak_container, best_left - resample_boundary, best_right + resample_boundary);
842 std::vector<double> int_here;
843 for (
const auto& peak : used_chromatogram) int_here.push_back(peak.getIntensity());
845 double tic = std::accumulate(int_here.begin(), int_here.end(), 0.0);
846 if (tic > 0.0) all_ints.push_back(int_here);
850 std::vector<double> mean_shapes;
851 std::vector<double> mean_coel;
852 for (
Size k = 0;
k < all_ints.size();
k++)
854 std::vector<double> shapes;
855 std::vector<double> coel;
856 for (
Size i = 0; i < all_ints.size(); i++)
858 if (i ==
k) {
continue;}
860 all_ints[
k], all_ints[i], boost::numeric_cast<int>(all_ints[i].size()), 1);
866 shapes.push_back(res_shape);
867 coel.push_back(res_coelution);
873 msc = std::for_each(shapes.begin(), shapes.end(), msc);
874 double shapes_mean = msc.
mean();
875 msc = std::for_each(coel.begin(), coel.end(), msc);
876 double coel_mean = msc.
mean();
880 mean_shapes.push_back(shapes_mean);
881 mean_coel.push_back(coel_mean);
887 int min_index_shape = std::distance(mean_shapes.begin(), std::min_element(mean_shapes.begin(), mean_shapes.end()));
888 int max_index_coel = std::distance(mean_coel.begin(), std::max_element(mean_coel.begin(), mean_coel.end()));
891 int missing_peaks = 0;
892 int multiple_peaks = 0;
895 std::vector<double> left_borders;
896 std::vector<double> right_borders;
897 for (
Size k = 0;
k < picked_chroms.size();
k++)
906 for (
Size i = 0; i < picked_chroms[
k].size(); i++)
908 if (picked_chroms[
k][i].getMZ() >= best_left && picked_chroms[
k][i].getMZ() <= best_right)
911 if (picked_chroms[
k][i].getIntensity() > max_int)
913 max_int = picked_chroms[
k][i].getIntensity() > max_int;
920 if (l_tmp > 0.0) left_borders.push_back(l_tmp);
921 if (r_tmp > 0.0) right_borders.push_back(r_tmp);
923 if (pfound == 0) missing_peaks++;
924 if (pfound > 1) multiple_peaks++;
929 OPENMS_LOG_DEBUG <<
" Overall found missing : " << missing_peaks <<
" and multiple : " << multiple_peaks << std::endl;
935 if (min_index_shape == max_index_coel)
937 OPENMS_LOG_DEBUG <<
" Element " << min_index_shape <<
" is a candidate for removal ... " << std::endl;
938 outlier =
String(picked_chroms[min_index_shape].getNativeID());
950 double shape_score = std::accumulate(mean_shapes.begin(), mean_shapes.end(), 0.0) / mean_shapes.size();
951 double coel_score = std::accumulate(mean_coel.begin(), mean_coel.end(), 0.0) / mean_coel.size();
952 coel_score = (coel_score - 1.0) / 2.0;
954 double score = shape_score - coel_score - 1.0 * missing_peaks / picked_chroms.size();
956 OPENMS_LOG_DEBUG <<
" Computed score " << score <<
" (from " << shape_score <<
957 " - " << coel_score <<
" - " << 1.0 * missing_peaks / picked_chroms.size() <<
")" << std::endl;
971 template <
typename SpectrumT>
972 void recalculatePeakBorders_(
const std::vector<SpectrumT>& picked_chroms,
double& best_left,
double& best_right,
double max_z)
980 std::vector<double> left_borders;
981 std::vector<double> right_borders;
982 for (
Size k = 0;
k < picked_chroms.size();
k++)
987 for (
Size i = 0; i < picked_chroms[
k].size(); i++)
989 if (picked_chroms[
k][i].getMZ() >= best_left && picked_chroms[
k][i].getMZ() <= best_right)
1001 left_borders.push_back(left);
1002 right_borders.push_back(right);
1003 OPENMS_LOG_DEBUG <<
" * peak " <<
k <<
" left boundary " << left_borders.back() <<
" with inty " << max_int << std::endl;
1004 OPENMS_LOG_DEBUG <<
" * peak " <<
k <<
" right boundary " << right_borders.back() <<
" with inty " << max_int << std::endl;
1009 if (right_borders.empty())
1027 mean = std::accumulate(right_borders.begin(), right_borders.end(), 0.0) / (double) right_borders.size();
1028 stdev = std::sqrt(std::inner_product(right_borders.begin(), right_borders.end(), right_borders.begin(), 0.0)
1029 / right_borders.size() -
mean *
mean);
1030 std::sort(right_borders.begin(), right_borders.end());
1033 << best_right <<
" std " << stdev <<
" : " << std::fabs(best_right -
mean) / stdev
1034 <<
" coefficient of variation" << std::endl;
1037 if (std::fabs(best_right -
mean) / stdev > max_z)
1039 best_right = right_borders[right_borders.size() / 2];
1040 OPENMS_LOG_DEBUG <<
" - CV too large: correcting right boundary to " << best_right << std::endl;
1044 mean = std::accumulate(left_borders.begin(), left_borders.end(), 0.0) / (double) left_borders.size();
1045 stdev = std::sqrt(std::inner_product(left_borders.begin(), left_borders.end(), left_borders.begin(), 0.0)
1046 / left_borders.size() -
mean *
mean);
1047 std::sort(left_borders.begin(), left_borders.end());
1050 << best_left <<
" std " << stdev <<
" : " << std::fabs(best_left -
mean) / stdev
1051 <<
" coefficient of variation" << std::endl;
1054 if (std::fabs(best_left -
mean) / stdev > max_z)
1056 best_left = left_borders[left_borders.size() / 2];
1057 OPENMS_LOG_DEBUG <<
" - CV too large: correcting left boundary to " << best_left << std::endl;
1079 template <
typename SpectrumT>
1081 SpectrumT& master_peak_container,
double left_boundary,
double right_boundary)
1088 typename SpectrumT::const_iterator begin = ref_chromatogram.begin();
1089 while (begin != ref_chromatogram.end() && begin->getMZ() < left_boundary) {begin++; }
1090 if (begin != ref_chromatogram.begin()) {begin--; }
1092 typename SpectrumT::const_iterator end = begin;
1093 while (end != ref_chromatogram.end() && end->getMZ() < right_boundary) {end++; }
1094 if (end != ref_chromatogram.end()) {end++; }
1097 master_peak_container.resize(distance(begin, end));
1098 typename SpectrumT::iterator it = master_peak_container.begin();
1099 for (
typename SpectrumT::const_iterator chrom_it = begin; chrom_it != end; chrom_it++, it++)
1101 it->setMZ(chrom_it->getMZ());
1115 template <
typename SpectrumT>
1117 const SpectrumT& master_peak_container,
double left_boundary,
double right_boundary)
1122 typename SpectrumT::const_iterator begin = chromatogram.begin();
1123 while (begin != chromatogram.end() && begin->getMZ() < left_boundary) {begin++;}
1124 if (begin != chromatogram.begin()) {begin--;}
1126 typename SpectrumT::const_iterator end = begin;
1127 while (end != chromatogram.end() && end->getMZ() < right_boundary) {end++;}
1128 if (end != chromatogram.end()) {end++;}
1130 SpectrumT resampled_peak_container = master_peak_container;
1132 lresampler.
raster(begin, end, resampled_peak_container.begin(), resampled_peak_container.end());
1134 return resampled_peak_container;
#define OPENMS_LOG_DEBUG
Macro for general debugging information.
Definition: LogStream.h:470
const String & getNativeID() const
returns the native identifier for the spectrum, used by the acquisition software.
void setNativeID(const String &native_id)
sets the native identifier for the spectrum, used by the acquisition software.
A 2-dimensional hull representation in [counter]clockwise direction - depending on axis labelling.
Definition: ConvexHull2D.h:73
void setHullPoints(const PointArrayType &points)
accessor for the outer(!) points (no checking is performed if this is actually a convex hull)
A base class for all classes handling default parameters.
Definition: DefaultParamHandler.h:93
A method or algorithm argument contains illegal values.
Definition: Exception.h:656
An LC-MS feature.
Definition: Feature.h:72
const std::vector< ConvexHull2D > & getConvexHulls() const
Non-mutable access to the convex hulls.
void setQuality(Size index, QualityType q)
Set the quality in dimension c.
void setOverallQuality(QualityType q)
Set the overall quality.
Linear Resampling of raw data with alignment.
Definition: LinearResamplerAlign.h:59
void raster(SpecT &container)
Applies the resampling algorithm to a container (MSSpectrum or MSChromatogram).
Definition: LinearResamplerAlign.h:80
A multi-chromatogram MRM feature.
Definition: MRMFeature.h:52
void addFeature(const Feature &feature, const String &key)
Adds an feature from a single chromatogram into the feature.
void addPrecursorFeature(const Feature &feature, const String &key)
Adds a precursor feature from a single chromatogram into the feature.
The MRMTransitionGroupPicker finds peaks in chromatograms that belong to the same precursors.
Definition: MRMTransitionGroupPicker.h:81
void findLargestPeak(const std::vector< MSChromatogram > &picked_chroms, int &chr_idx, int &peak_idx)
Find largest peak in a vector of chromatograms.
String boundary_selection_method_
Which method to use for selecting peaks' boundaries.
Definition: MRMTransitionGroupPicker.h:1161
String peak_integration_
Definition: MRMTransitionGroupPicker.h:1140
bool compute_total_mi_
Definition: MRMTransitionGroupPicker.h:1147
PeakPickerMRM picker_
Definition: MRMTransitionGroupPicker.h:1163
const SpectrumT & selectChromHelper_(const MRMTransitionGroup< SpectrumT, TransitionT > &transition_group, const String &native_id)
Select matching precursor or fragment ion chromatogram.
Definition: MRMTransitionGroupPicker.h:788
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:1080
String background_subtraction_
Definition: MRMTransitionGroupPicker.h:1141
bool compute_peak_quality_
Definition: MRMTransitionGroupPicker.h:1145
bool use_precursors_
Definition: MRMTransitionGroupPicker.h:1143
void pickApex(std::vector< SpectrumT > &picked_chroms, const double best_left, const double best_right, const double peak_apex, double &min_left, double &max_right, std::vector< double > &left_edges, std::vector< double > &right_edges)
Apex-based peak picking.
Definition: MRMTransitionGroupPicker.h:351
double min_peak_width_
Definition: MRMTransitionGroupPicker.h:1152
void remove_overlapping_features(std::vector< SpectrumT > &picked_chroms, double best_left, double best_right)
Remove overlapping features.
Definition: MRMTransitionGroupPicker.h:725
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:972
MRMTransitionGroupPicker & operator=(const MRMTransitionGroupPicker &rhs)
Assignment operator is protected for algorithm.
int stop_after_feature_
Definition: MRMTransitionGroupPicker.h:1150
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:1116
double recalculate_peaks_max_z_
Definition: MRMTransitionGroupPicker.h:1153
PeakIntegrator pi_
Definition: MRMTransitionGroupPicker.h:1164
void findWidestPeakIndices(const std::vector< MSChromatogram > &picked_chroms, Int &chrom_idx, Int &point_idx) const
Given a vector of chromatograms, find the indices of the chromatogram containing the widest peak and ...
double min_qual_
Definition: MRMTransitionGroupPicker.h:1148
double resample_boundary_
Definition: MRMTransitionGroupPicker.h:1154
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:226
~MRMTransitionGroupPicker() override
Destructor.
void updateMembers_() override
Synchronize members with param class.
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:821
double stop_after_intensity_ratio_
Definition: MRMTransitionGroupPicker.h:1151
void pickTransitionGroup(MRMTransitionGroup< SpectrumT, TransitionT > &transition_group)
Pick a group of chromatograms belonging to the same peptide.
Definition: MRMTransitionGroupPicker.h:113
bool use_consensus_
Definition: MRMTransitionGroupPicker.h:1144
void pickFragmentChromatograms(const MRMTransitionGroup< SpectrumT, TransitionT > &transition_group, const std::vector< SpectrumT > &picked_chroms, MRMFeature &mrmFeature, const std::vector< SpectrumT > &smoothed_chroms, const double best_left, const double best_right, const bool use_consensus_, double &total_intensity, double &total_xic, double &total_mi, double &total_peak_apices, const SpectrumT &master_peak_container, const std::vector< double > &left_edges, const std::vector< double > &right_edges, const int chr_idx, const int peak_idx)
Definition: MRMTransitionGroupPicker.h:392
bool recalculate_peaks_
Definition: MRMTransitionGroupPicker.h:1142
void pickPrecursorChromatograms(const MRMTransitionGroup< SpectrumT, TransitionT > &transition_group, const std::vector< SpectrumT > &picked_chroms, MRMFeature &mrmFeature, const std::vector< SpectrumT > &smoothed_chroms, const double best_left, const double best_right, const bool use_consensus_, double &total_intensity, const SpectrumT &master_peak_container, const std::vector< double > &left_edges, const std::vector< double > &right_edges, const int chr_idx, const int peak_idx)
Definition: MRMTransitionGroupPicker.h:593
bool compute_peak_shape_metrics_
Definition: MRMTransitionGroupPicker.h:1146
std::vector< ChromatogramType > & getPrecursorChromatograms()
Definition: MRMTransitionGroup.h:237
ChromatogramType & getChromatogram(const String &key)
Definition: MRMTransitionGroup.h:219
bool hasPrecursorChromatogram(const String &key) const
Definition: MRMTransitionGroup.h:267
const String & getTransitionGroupID() const
Definition: MRMTransitionGroup.h:130
bool isInternallyConsistent() const
Check whether internal state is consistent, e.g. same number of chromatograms and transitions are pre...
Definition: MRMTransitionGroup.h:316
bool chromatogramIdsMatch() const
Ensure that chromatogram native ids match their keys in the map.
Definition: MRMTransitionGroup.h:325
bool hasTransition(const String &key) const
Definition: MRMTransitionGroup.h:170
const TransitionType & getTransition(const String &key)
Definition: MRMTransitionGroup.h:175
bool hasChromatogram(const String &key) const
Definition: MRMTransitionGroup.h:214
void addFeature(const MRMFeature &feature)
Definition: MRMTransitionGroup.h:300
const std::vector< TransitionType > & getTransitions() const
Definition: MRMTransitionGroup.h:142
ChromatogramType & getPrecursorChromatogram(const String &key)
Definition: MRMTransitionGroup.h:272
std::vector< ChromatogramType > & getChromatograms()
Definition: MRMTransitionGroup.h:186
The representation of a chromatogram.
Definition: MSChromatogram.h:58
void sortByIntensity(bool reverse=false)
Lexicographically sorts the peaks by their intensity.
void setMZ(CoordinateType coordinate)
Mutable access to the m/z coordinate (index 1)
Definition: Peak2D.h:202
void setRT(CoordinateType coordinate)
Mutable access to the RT coordinate (index 0)
Definition: Peak2D.h:214
IntensityType getIntensity() const
Definition: Peak2D.h:166
void setIntensity(IntensityType intensity)
Non-mutable access to the data point intensity (height)
Definition: Peak2D.h:172
Compute the area, background and shape metrics of a peak.
Definition: PeakIntegrator.h:74
Int points_across_half_height
Definition: PeakIntegrator.h:211
double apex_pos
Definition: PeakIntegrator.h:98
ConvexHull2D::PointArrayType hull_points
Definition: PeakIntegrator.h:102
double width_at_5
Definition: PeakIntegrator.h:133
Int points_across_baseline
Definition: PeakIntegrator.h:207
double width_at_50
Definition: PeakIntegrator.h:141
double end_position_at_50
Definition: PeakIntegrator.h:165
double baseline_delta_2_height
Definition: PeakIntegrator.h:203
double height
Definition: PeakIntegrator.h:94
double end_position_at_10
Definition: PeakIntegrator.h:161
double width_at_10
Definition: PeakIntegrator.h:137
double total_width
Definition: PeakIntegrator.h:169
double end_position_at_5
Definition: PeakIntegrator.h:157
double start_position_at_50
Definition: PeakIntegrator.h:153
double tailing_factor
Definition: PeakIntegrator.h:183
double slope_of_baseline
Definition: PeakIntegrator.h:198
double start_position_at_10
Definition: PeakIntegrator.h:149
double asymmetry_factor
Definition: PeakIntegrator.h:193
double start_position_at_5
Definition: PeakIntegrator.h:145
double area
Definition: PeakIntegrator.h:90
Definition: PeakIntegrator.h:86
Definition: PeakIntegrator.h:111
Definition: PeakIntegrator.h:129
The PeakPickerMRM finds peaks a single chromatogram.
Definition: PeakPickerMRM.h:70
@ IDX_LEFTBORDER
Definition: PeakPickerMRM.h:83
@ IDX_RIGHTBORDER
Definition: PeakPickerMRM.h:83
@ IDX_ABUNDANCE
Definition: PeakPickerMRM.h:83
A more convenient string class.
Definition: String.h:61
Size ensureUniqueId()
Assigns a valid unique id, but only if the present one is invalid. Returns 1 if the unique id was cha...
Definition: UniqueIdInterface.h:154
functor to compute the mean and stddev of sequence using the std::foreach algorithm
Definition: StatsHelpers.h:160
double mean() const
Definition: StatsHelpers.h:197
int Int
Signed integer type.
Definition: Types.h:102
unsigned int UInt
Unsigned integer type.
Definition: Types.h:94
size_t Size
Size type e.g. used as variable which can hold result of size()
Definition: Types.h:127
#define OPENMS_PRECONDITION(condition, message)
Precondition macro.
Definition: openms/include/OpenMS/CONCEPT/Macros.h:120
static double mean(IteratorType begin, IteratorType end)
Calculates the mean of a range of values.
Definition: StatisticFunctions.h:133
const double k
Definition: Constants.h:153
Main OpenMS namespace.
Definition: FeatureDeconvolution.h:47
OPENSWATHALGO_DLLAPI double rankedMutualInformation(std::vector< double > &data1, std::vector< double > &data2)
OPENSWATHALGO_DLLAPI XCorrArrayType normalizedCrossCorrelation(std::vector< double > &data1, std::vector< double > &data2, const int &maxdelay, const int &lag)
OPENSWATHALGO_DLLAPI XCorrArrayType::const_iterator xcorrArrayGetMaxPeak(const XCorrArrayType &array)
Find best peak in an cross-correlation (highest apex)