35 #ifndef OPENMS_ANALYSIS_OPENSWATH_MRMTRANSITIONGROUPPICKER_H 36 #define OPENMS_ANALYSIS_OPENSWATH_MRMTRANSITIONGROUPPICKER_H 112 template <
typename SpectrumT,
typename TransitionT>
118 std::vector<MSChromatogram > picked_chroms_;
131 !transition_group.
getTransition(native_id).isDetectingTransition() )
142 picker.pickChromatogram(chromatogram, picked_chrom);
144 picked_chroms_.push_back(picked_chrom);
152 SpectrumT picked_chrom;
154 String native_id = chromatogram.getNativeID();
156 picker.pickChromatogram(chromatogram, picked_chrom);
157 picked_chrom.sortByIntensity();
158 picked_chroms_.push_back(picked_chrom);
166 int chr_idx, peak_idx, cnt = 0;
167 std::vector<MRMFeature> features;
170 chr_idx = -1; peak_idx = -1;
171 findLargestPeak(picked_chroms_, chr_idx, peak_idx);
172 if (chr_idx == -1 && peak_idx == -1)
break;
175 MRMFeature mrm_feature = createMRMFeature(transition_group, picked_chroms_, chr_idx, peak_idx);
178 features.push_back(mrm_feature);
182 if ((stop_after_feature_ > 0 && cnt > stop_after_feature_) &&
190 for (
Size i = 0; i < features.size(); i++)
194 for (
Size j = 0; j < i; j++)
196 if ((
double)mrm_feature.
getMetaValue(
"leftWidth") >= (
double)features[j].getMetaValue(
"leftWidth") &&
209 template <
typename SpectrumT,
typename TransitionT>
211 std::vector<SpectrumT>& picked_chroms,
const int chr_idx,
const int peak_idx)
218 double best_left = picked_chroms[chr_idx].getFloatDataArrays()[1][peak_idx];
219 double best_right = picked_chroms[chr_idx].getFloatDataArrays()[2][peak_idx];
220 double peak_apex = picked_chroms[chr_idx][peak_idx].getRT();
221 LOG_DEBUG <<
"**** Creating MRMFeature for peak " << chr_idx <<
" " << peak_idx <<
" " <<
222 picked_chroms[chr_idx][peak_idx] <<
" with borders " << best_left <<
" " <<
223 best_right <<
" (" << best_right - best_left <<
")" << std::endl;
225 if (recalculate_peaks_)
228 recalculatePeakBorders_(picked_chroms, best_left, best_right, recalculate_peaks_max_z_);
229 if (peak_apex < best_left || peak_apex > best_right)
232 peak_apex = (best_left + best_right) / 2.0;
235 picked_chroms[chr_idx][peak_idx].setIntensity(0.0);
240 remove_overlapping_features(picked_chroms, best_left, best_right);
243 if (min_peak_width_ > 0.0 && std::fabs(best_right - best_left) < min_peak_width_)
248 if (compute_peak_quality_)
251 double qual = computeQuality_(transition_group, picked_chroms, chr_idx, best_left, best_right, outlier);
252 if (qual < min_qual_)
256 mrmFeature.setMetaValue(
"potentialOutlier", outlier);
257 mrmFeature.setMetaValue(
"initialPeakQuality", qual);
258 mrmFeature.setOverallQuality(qual);
264 SpectrumT master_peak_container;
265 const SpectrumT& ref_chromatogram = selectChromHelper_(transition_group, picked_chroms[chr_idx].getNativeID());
266 prepareMasterContainer_(ref_chromatogram, master_peak_container, best_left, best_right);
271 double total_intensity = 0;
double total_peak_apices = 0;
double total_xic = 0;
274 const SpectrumT& chromatogram = selectChromHelper_(transition_group, transition_group.
getTransitions()[
k].getNativeID());
277 for (
typename SpectrumT::const_iterator it = chromatogram.begin(); it != chromatogram.end(); it++)
279 total_xic += it->getIntensity();
284 const SpectrumT used_chromatogram = resampleChromatogram_(chromatogram, master_peak_container, best_left, best_right);
293 double intensity_sum(0.0), rt_sum(0.0);
294 double peak_apex_int = -1;
295 double peak_apex_dist = std::fabs(used_chromatogram.begin()->getMZ() - peak_apex);
297 for (
typename SpectrumT::const_iterator it = used_chromatogram.begin(); it != used_chromatogram.end(); it++)
299 if (it->getMZ() > best_left && it->getMZ() < best_right)
303 p[1] = it->getIntensity();
304 hull_points.push_back(p);
305 if (std::fabs(it->getMZ() - peak_apex) <= peak_apex_dist)
307 peak_apex_int = p[1];
308 peak_apex_dist = std::fabs(it->getMZ() - peak_apex);
310 rt_sum += it->getMZ();
311 intensity_sum += it->getIntensity();
315 double background(0), avg_noise_level(0);
316 if (background_subtraction_ !=
"none")
318 if (background_subtraction_ ==
"smoothed")
334 else if (background_subtraction_ ==
"original")
336 calculateBgEstimation_(used_chromatogram, best_left, best_right, background, avg_noise_level);
338 intensity_sum -= background;
339 peak_apex_int -= avg_noise_level;
340 if (intensity_sum < 0) {intensity_sum = 0;}
341 if (peak_apex_int < 0) {peak_apex_int = 0;}
344 f.
setRT(picked_chroms[chr_idx][peak_idx].getMZ());
349 if (chromatogram.metaValueExists(
"product_mz"))
351 f.
setMetaValue(
"MZ", chromatogram.getMetaValue(
"product_mz"));
352 f.
setMZ(chromatogram.getMetaValue(
"product_mz"));
356 LOG_WARN <<
"Please set meta value 'product_mz' on chromatogram to populate feature m/z value" << std::endl;
358 f.
setMetaValue(
"native_id", chromatogram.getNativeID());
360 if (background_subtraction_ !=
"none")
363 f.
setMetaValue(
"noise_background_level", avg_noise_level);
368 total_intensity += intensity_sum;
369 total_peak_apices += peak_apex_int;
371 mrmFeature.addFeature(f, chromatogram.getNativeID());
380 const SpectrumT used_chromatogram = resampleChromatogram_(chromatogram, master_peak_container, best_left, best_right);
388 double intensity_sum(0.0), rt_sum(0.0);
389 double peak_apex_int = -1;
390 double peak_apex_dist = std::fabs(used_chromatogram.begin()->getMZ() - peak_apex);
392 for (
typename SpectrumT::const_iterator it = used_chromatogram.begin(); it != used_chromatogram.end(); it++)
394 if (it->getMZ() > best_left && it->getMZ() < best_right)
398 p[1] = it->getIntensity();
399 hull_points.push_back(p);
400 if (std::fabs(it->getMZ() - peak_apex) <= peak_apex_dist)
402 peak_apex_int = p[1];
403 peak_apex_dist = std::fabs(it->getMZ() - peak_apex);
405 rt_sum += it->getMZ();
406 intensity_sum += it->getIntensity();
410 if (chromatogram.metaValueExists(
"precursor_mz"))
412 f.
setMZ(chromatogram.getMetaValue(
"precursor_mz"));
413 mrmFeature.setMZ(chromatogram.getMetaValue(
"precursor_mz"));
416 f.
setRT(picked_chroms[chr_idx][peak_idx].getMZ());
421 f.
setMetaValue(
"native_id", chromatogram.getNativeID());
426 total_intensity += intensity_sum;
429 mrmFeature.addPrecursorFeature(f, chromatogram.getNativeID());
432 mrmFeature.setRT(peak_apex);
433 mrmFeature.setIntensity(total_intensity);
435 mrmFeature.setMetaValue(
"leftWidth", best_left);
436 mrmFeature.setMetaValue(
"rightWidth", best_right);
437 mrmFeature.setMetaValue(
"total_xic", total_xic);
438 mrmFeature.setMetaValue(
"peak_apices_sum", total_peak_apices);
440 mrmFeature.ensureUniqueId();
457 template <
typename SpectrumT>
462 for (
Size k = 0;
k < picked_chroms.size();
k++)
464 for (
Size i = 0; i < picked_chroms[
k].size(); i++)
466 if (picked_chroms[
k][i].getMZ() >= best_left && picked_chroms[
k][i].getMZ() <= best_right)
470 picked_chroms[
k][i].setIntensity(0.0);
476 for (
Size k = 0;
k < picked_chroms.size();
k++)
478 for (
Size i = 0; i < picked_chroms[
k].size(); i++)
480 if (picked_chroms[
k][i].getIntensity() <= 0.0) {
continue; }
482 double left = picked_chroms[
k].getFloatDataArrays()[1][i];
483 double right = picked_chroms[
k].getFloatDataArrays()[2][i];
484 if ((left > best_left && left < best_right)
485 || (right > best_left && right < best_right))
489 picked_chroms[
k][i].setIntensity(0.0);
496 void findLargestPeak(std::vector<MSChromatogram >& picked_chroms,
int& chr_idx,
int& peak_idx);
501 void updateMembers_();
509 template <
typename SpectrumT,
typename TransitionT>
522 throw Exception::IllegalArgument(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION,
"Did not find chromatogram for id '" + native_id +
"'.");
542 template <
typename SpectrumT,
typename TransitionT>
544 std::vector<SpectrumT>& picked_chroms,
const int chr_idx,
545 const double best_left,
const double best_right,
String& outlier)
551 double resample_boundary = resample_boundary_;
552 SpectrumT master_peak_container;
553 const SpectrumT& ref_chromatogram = selectChromHelper_(transition_group, picked_chroms[chr_idx].getNativeID());
554 prepareMasterContainer_(ref_chromatogram, master_peak_container, best_left - resample_boundary, best_right + resample_boundary);
555 std::vector<std::vector<double> > all_ints;
556 for (
Size k = 0;
k < picked_chroms.size();
k++)
558 const SpectrumT chromatogram = selectChromHelper_(transition_group, picked_chroms[
k].getNativeID());
559 const SpectrumT used_chromatogram = resampleChromatogram_(chromatogram,
560 master_peak_container, best_left - resample_boundary, best_right + resample_boundary);
562 std::vector<double> int_here;
563 for (
Size i = 0; i < used_chromatogram.size(); i++)
565 int_here.push_back(used_chromatogram[i].getIntensity());
567 all_ints.push_back(int_here);
571 std::vector<double> mean_shapes;
572 std::vector<double> mean_coel;
573 for (
Size k = 0;
k < all_ints.size();
k++)
575 std::vector<double> shapes;
576 std::vector<double> coel;
577 for (
Size i = 0; i < all_ints.size(); i++)
579 if (i ==
k) {
continue;}
581 all_ints[
k], all_ints[i], boost::numeric_cast<int>(all_ints[i].size()), 1);
587 shapes.push_back(res_shape);
588 coel.push_back(res_coelution);
594 msc = std::for_each(shapes.begin(), shapes.end(), msc);
595 double shapes_mean = msc.
mean();
596 msc = std::for_each(coel.begin(), coel.end(), msc);
597 double coel_mean = msc.
mean();
601 mean_shapes.push_back(shapes_mean);
602 mean_coel.push_back(coel_mean);
608 int min_index_shape = std::distance(mean_shapes.begin(), std::min_element(mean_shapes.begin(), mean_shapes.end()));
609 int max_index_coel = std::distance(mean_coel.begin(), std::max_element(mean_coel.begin(), mean_coel.end()));
612 int missing_peaks = 0;
613 int multiple_peaks = 0;
616 std::vector<double> left_borders;
617 std::vector<double> right_borders;
618 for (
Size k = 0;
k < picked_chroms.size();
k++)
627 for (
Size i = 0; i < picked_chroms[
k].size(); i++)
629 if (picked_chroms[
k][i].getMZ() >= best_left && picked_chroms[
k][i].getMZ() <= best_right)
632 if (picked_chroms[
k][i].getIntensity() > max_int)
634 max_int = picked_chroms[
k][i].getIntensity() > max_int;
635 l_tmp = picked_chroms[
k].getFloatDataArrays()[1][i];
636 r_tmp = picked_chroms[
k].getFloatDataArrays()[2][i];
641 if (l_tmp > 0.0) left_borders.push_back(l_tmp);
642 if (r_tmp > 0.0) right_borders.push_back(r_tmp);
644 if (pfound == 0) missing_peaks++;
645 if (pfound > 1) multiple_peaks++;
650 LOG_DEBUG <<
" Overall found missing : " << missing_peaks <<
" and multiple : " << multiple_peaks << std::endl;
656 if (min_index_shape == max_index_coel)
658 LOG_DEBUG <<
" element " << min_index_shape <<
" is a candidate for removal ... " << std::endl;
659 outlier =
String(picked_chroms[min_index_shape].getNativeID());
671 double shape_score = std::accumulate(mean_shapes.begin(), mean_shapes.end(), 0.0) / mean_shapes.size();
672 double coel_score = std::accumulate(mean_coel.begin(), mean_coel.end(), 0.0) / mean_coel.size();
673 coel_score = (coel_score - 1.0) / 2.0;
675 double score = shape_score - coel_score - 1.0 * missing_peaks / picked_chroms.size();
677 LOG_DEBUG <<
" computed score " << score <<
" (from " << shape_score <<
678 " - " << coel_score <<
" - " << 1.0 * missing_peaks / picked_chroms.size() <<
")" << std::endl;
692 template <
typename SpectrumT>
699 std::vector<double> left_borders;
700 std::vector<double> right_borders;
701 for (
Size k = 0;
k < picked_chroms.size();
k++)
706 for (
Size i = 0; i < picked_chroms[
k].size(); i++)
708 if (picked_chroms[
k][i].getMZ() >= best_left && picked_chroms[
k][i].getMZ() <= best_right)
710 if (picked_chroms[
k].getFloatDataArrays()[0][i] > max_int)
712 max_int = picked_chroms[
k].getFloatDataArrays()[0][i];
713 left = picked_chroms[
k].getFloatDataArrays()[1][i];
714 right = picked_chroms[
k].getFloatDataArrays()[2][i];
720 left_borders.push_back(left);
721 right_borders.push_back(right);
722 LOG_DEBUG <<
" * " <<
k <<
" left boundary " << left_borders.back() <<
" with int " << max_int << std::endl;
723 LOG_DEBUG <<
" * " <<
k <<
" right boundary " << right_borders.back() <<
" with int " << max_int << std::endl;
728 if (right_borders.empty())
746 mean = std::accumulate(right_borders.begin(), right_borders.end(), 0.0) / (
double) right_borders.size();
747 stdev = std::sqrt(std::inner_product(right_borders.begin(), right_borders.end(), right_borders.begin(), 0.0)
748 / right_borders.size() - mean *
mean);
749 std::sort(right_borders.begin(), right_borders.end());
751 LOG_DEBUG <<
" - Recalculating right peak boundaries " << mean <<
" mean / best " 752 << best_right <<
" std " << stdev <<
" : " << std::fabs(best_right - mean) / stdev
753 <<
" coefficient of variation" << std::endl;
756 if (std::fabs(best_right - mean) / stdev > max_z)
758 best_right = right_borders[right_borders.size() / 2];
759 LOG_DEBUG <<
" - Setting right boundary to " << best_right << std::endl;
763 mean = std::accumulate(left_borders.begin(), left_borders.end(), 0.0) / (
double) left_borders.size();
764 stdev = std::sqrt(std::inner_product(left_borders.begin(), left_borders.end(), left_borders.begin(), 0.0)
765 / left_borders.size() - mean *
mean);
766 std::sort(left_borders.begin(), left_borders.end());
768 LOG_DEBUG <<
" - Recalculating left peak boundaries " << mean <<
" mean / best " 769 << best_left <<
" std " << stdev <<
" : " << std::fabs(best_left - mean) / stdev
770 <<
" coefficient of variation" << std::endl;
773 if (std::fabs(best_left - mean) / stdev > max_z)
775 best_left = left_borders[left_borders.size() / 2];
776 LOG_DEBUG <<
" - Setting left boundary to " << best_left << std::endl;
798 template <
typename SpectrumT>
800 SpectrumT& master_peak_container,
double left_boundary,
double right_boundary)
807 typename SpectrumT::const_iterator begin = ref_chromatogram.begin();
808 while (begin != ref_chromatogram.end() && begin->getMZ() < left_boundary) {begin++; }
809 if (begin != ref_chromatogram.begin()) {begin--; }
811 typename SpectrumT::const_iterator end = begin;
812 while (end != ref_chromatogram.end() && end->getMZ() < right_boundary) {end++; }
813 if (end != ref_chromatogram.end()) {end++; }
816 master_peak_container.resize(distance(begin, end));
817 typename SpectrumT::iterator it = master_peak_container.begin();
818 for (
typename SpectrumT::const_iterator chrom_it = begin; chrom_it != end; chrom_it++, it++)
820 it->setMZ(chrom_it->getMZ());
834 template <
typename SpectrumT>
836 const SpectrumT& master_peak_container,
double left_boundary,
double right_boundary)
841 typename SpectrumT::const_iterator begin = chromatogram.begin();
842 while (begin != chromatogram.end() && begin->getMZ() < left_boundary) {begin++;}
843 if (begin != chromatogram.begin()) {begin--;}
845 typename SpectrumT::const_iterator end = begin;
846 while (end != chromatogram.end() && end->getMZ() < right_boundary) {end++;}
847 if (end != chromatogram.end()) {end++;}
849 SpectrumT resampled_peak_container = master_peak_container;
851 lresampler.
raster(begin, end, resampled_peak_container.begin(), resampled_peak_container.end());
853 return resampled_peak_container;
865 double best_left,
double best_right,
double & background,
double & avg_noise_level);
882 #endif // OPENMS_ANALYSIS_OPENSWATH_MRMTRANSITIONGROUPPICKER_H
bool hasTransition(String key) const
Definition: MRMTransitionGroup.h:159
double min_qual_
Definition: MRMTransitionGroupPicker.h:872
String background_subtraction_
Definition: MRMTransitionGroupPicker.h:868
double recalculate_peaks_max_z_
Definition: MRMTransitionGroupPicker.h:877
A more convenient string class.
Definition: String.h:57
bool compute_peak_quality_
Definition: MRMTransitionGroupPicker.h:871
void setMZ(CoordinateType coordinate)
Mutable access to the m/z coordinate (index 1)
Definition: Peak2D.h:203
double mean() const
Definition: StatsHelpers.h:208
The representation of a chromatogram.
Definition: MSChromatogram.h:55
OPENSWATHALGO_DLLAPI XCorrArrayType normalizedCrossCorrelation(std::vector< double > &data1, std::vector< double > &data2, int maxdelay, int lag)
const std::vector< TransitionType > & getTransitions() const
Definition: MRMTransitionGroup.h:143
#define OPENMS_PRECONDITION(condition, message)
Precondition macro.
Definition: openms/include/OpenMS/CONCEPT/Macros.h:107
std::vector< PointType > PointArrayType
Definition: ConvexHull2D.h:77
bool hasPrecursorChromatogram(String key) const
Definition: MRMTransitionGroup.h:237
const std::vector< ChromatogramType > & getPrecursorChromatograms() const
Definition: MRMTransitionGroup.h:209
The PeakPickerMRM finds peaks a single chromatogram.
Definition: PeakPickerMRM.h:63
int stop_after_feature_
Definition: MRMTransitionGroupPicker.h:874
Main OpenMS namespace.
Definition: FeatureDeconvolution.h:47
const std::vector< ConvexHull2D > & getConvexHulls() const
Non-mutable access to the convex hulls.
IntensityType getIntensity() const
Definition: Peak2D.h:167
void setParameters(const Param ¶m)
Sets the parameters.
A 2-dimensional hull representation in [counter]clockwise direction - depending on axis labelling...
Definition: ConvexHull2D.h:73
ChromatogramType & getChromatogram(String key)
Definition: MRMTransitionGroup.h:198
#define LOG_DEBUG
Macro for general debugging information.
Definition: LogStream.h:459
static double mean(IteratorType begin, IteratorType end)
Calculates the mean of a range of values.
Definition: StatisticFunctions.h:135
void setIntensity(IntensityType intensity)
Non-mutable access to the data point intensity (height)
Definition: Peak2D.h:173
#define LOG_WARN
Macro if a warning, a piece of information which should be read by the user, should be logged...
Definition: LogStream.h:451
void sortByIntensity(bool reverse=false)
Lexicographically sorts the peaks by their intensity.
double min_peak_width_
Definition: MRMTransitionGroupPicker.h:876
double resample_boundary_
Definition: MRMTransitionGroupPicker.h:878
const SpectrumT & selectChromHelper_(MRMTransitionGroup< SpectrumT, TransitionT > &transition_group, String native_id)
Select matching precursor or fragment ion chromatogram.
Definition: MRMTransitionGroupPicker.h:510
bool isInternallyConsistent() const
Check whether internal state is consistent, e.g. same number of chromatograms and transitions are pre...
Definition: MRMTransitionGroup.h:274
bool hasChromatogram(String key) const
Definition: MRMTransitionGroup.h:193
const std::vector< ChromatogramType > & getChromatograms() const
Definition: MRMTransitionGroup.h:175
A method or algorithm argument contains illegal values.
Definition: Exception.h:649
void setRT(CoordinateType coordinate)
Mutable access to the RT coordinate (index 0)
Definition: Peak2D.h:215
The MRMTransitionGroupPicker finds peaks in chromatograms that belong to the same precursors...
Definition: MRMTransitionGroupPicker.h:79
bool recalculate_peaks_
Definition: MRMTransitionGroupPicker.h:869
void setQuality(Size index, QualityType q)
Set the quality in dimension c.
void raster(SpecT &container)
Applies the resampling algorithm to a container (MSSpectrum or MSChromatogram).
Definition: LinearResamplerAlign.h:81
Linear Resampling of raw data with alignment.
Definition: LinearResamplerAlign.h:58
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:799
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:131
double computeQuality_(MRMTransitionGroup< SpectrumT, TransitionT > &transition_group, 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:543
An LC-MS feature.
Definition: Feature.h:70
ChromatogramType & getPrecursorChromatogram(String key)
Definition: MRMTransitionGroup.h:242
functor to compute the mean and stddev of sequence using the std::foreach algorithm ...
Definition: StatsHelpers.h:170
bool isSorted() const
Checks if all peaks are sorted with respect to ascending RT.
void addFeature(MRMFeature &feature)
Definition: MRMTransitionGroup.h:263
void setOverallQuality(QualityType q)
Set the overall quality.
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:835
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:128
void sortByPosition()
Lexicographically sorts the peaks by their position.
void pickTransitionGroup(MRMTransitionGroup< SpectrumT, TransitionT > &transition_group)
Pick a group of chromatograms belonging to the same peptide.
Definition: MRMTransitionGroupPicker.h:113
bool chromatogramIdsMatch()
Ensure that chromatogram native ids match their keys in the map.
Definition: MRMTransitionGroup.h:283
bool use_precursors_
Definition: MRMTransitionGroupPicker.h:870
A base class for all classes handling default parameters.
Definition: DefaultParamHandler.h:92
void remove_overlapping_features(std::vector< SpectrumT > &picked_chroms, double best_left, double best_right)
Remove overlapping features.
Definition: MRMTransitionGroupPicker.h:458
MRMFeature createMRMFeature(MRMTransitionGroup< SpectrumT, TransitionT > &transition_group, std::vector< SpectrumT > &picked_chroms, const int chr_idx, const int peak_idx)
Create feature from a vector of chromatograms and a specified peak.
Definition: MRMTransitionGroupPicker.h:210
OPENSWATHALGO_DLLAPI XCorrArrayType::iterator xcorrArrayGetMaxPeak(XCorrArrayType &array)
Find best peak in an cross-correlation (highest apex)
double stop_after_intensity_ratio_
Definition: MRMTransitionGroupPicker.h:875
A multi-chromatogram MRM feature.
Definition: MRMFeature.h:50
void recalculatePeakBorders_(std::vector< SpectrumT > &picked_chroms, double &best_left, double &best_right, double max_z)
Recalculate the borders of the peak.
Definition: MRMTransitionGroupPicker.h:693
Not implemented exception.
Definition: Exception.h:437
const TransitionType & getTransition(String key)
Definition: MRMTransitionGroup.h:164