/** @brief Applies the peak-picking algorithm to a map (MSExperiment). This method picks peaks for each scan in the map consecutively. The resulting picked peaks are written to the output map. Currently we have to give up const-correctness but we know that everything on disc is constant */ void PeakPickerHiRes::pickExperiment(/* const */ OnDiscMSExperiment& input, PeakMap& output, const bool check_spectrum_type) const { // make sure that output is clear output.clear(true); // copy experimental settings static_cast<ExperimentalSettings &>(output) = *input.getExperimentalSettings(); Size progress = 0; startProgress(0, input.size() + input.getNrChromatograms(), "picking peaks"); // resize output with respect to input output.resize(input.size()); if (input.getNrSpectra() > 0) { for (Size scan_idx = 0; scan_idx != input.size(); ++scan_idx) { if (ms_levels_.empty()) //auto mode { MSSpectrum s = input[scan_idx]; s.sortByPosition(); // determine type of spectral data (profile or centroided) SpectrumSettings::SpectrumType spectrumType = s.getType(); if (spectrumType == SpectrumSettings::CENTROID) { output[scan_idx] = input[scan_idx]; } else { pick(s, output[scan_idx]); } } else if (!ListUtils::contains(ms_levels_, input[scan_idx].getMSLevel())) // manual mode { output[scan_idx] = input[scan_idx]; } else { MSSpectrum s = input[scan_idx]; s.sortByPosition(); // determine type of spectral data (profile or centroided) SpectrumSettings::SpectrumType spectrum_type = s.getType(); if (spectrum_type == SpectrumSettings::CENTROID && check_spectrum_type) { throw OpenMS::Exception::IllegalArgument(__FILE__, __LINE__, __FUNCTION__, "Error: Centroided data provided but profile spectra expected."); } pick(s, output[scan_idx]); } setProgress(++progress); } } for (Size i = 0; i < input.getNrChromatograms(); ++i) { MSChromatogram chromatogram; pick(input.getChromatogram(i), chromatogram); output.addChromatogram(chromatogram); setProgress(++progress); } endProgress(); return; }
/** * @brief Applies the peak-picking algorithm to a map (MSExperiment). This * method picks peaks for each scan in the map consecutively. The resulting * picked peaks are written to the output map. * * @param input input map in profile mode * @param output output map with picked peaks * @param boundaries_spec boundaries of the picked peaks in spectra * @param boundaries_chrom boundaries of the picked peaks in chromatograms * @param check_spectrum_type if set, checks spectrum type and throws an exception if a centroided spectrum is passed */ void PeakPickerHiRes::pickExperiment(const PeakMap& input, PeakMap& output, std::vector<std::vector<PeakBoundary> >& boundaries_spec, std::vector<std::vector<PeakBoundary> >& boundaries_chrom, const bool check_spectrum_type) const { // make sure that output is clear output.clear(true); // copy experimental settings static_cast<ExperimentalSettings &>(output) = input; // resize output with respect to input output.resize(input.size()); Size progress = 0; startProgress(0, input.size() + input.getChromatograms().size(), "picking peaks"); if (input.getNrSpectra() > 0) { for (Size scan_idx = 0; scan_idx != input.size(); ++scan_idx) { if (ms_levels_.empty()) // auto mode { SpectrumSettings::SpectrumType spectrum_type = input[scan_idx].getType(); if (spectrum_type == SpectrumSettings::CENTROID) { output[scan_idx] = input[scan_idx]; } else { std::vector<PeakBoundary> boundaries_s; // peak boundaries of a single spectrum pick(input[scan_idx], output[scan_idx], boundaries_s); boundaries_spec.push_back(boundaries_s); } } else if (!ListUtils::contains(ms_levels_, input[scan_idx].getMSLevel())) // manual mode { output[scan_idx] = input[scan_idx]; } else { std::vector<PeakBoundary> boundaries_s; // peak boundaries of a single spectrum // determine type of spectral data (profile or centroided) SpectrumSettings::SpectrumType spectrum_type = input[scan_idx].getType(); if (spectrum_type == SpectrumSettings::CENTROID && check_spectrum_type) { throw OpenMS::Exception::IllegalArgument(__FILE__, __LINE__, __FUNCTION__, "Error: Centroided data provided but profile spectra expected."); } pick(input[scan_idx], output[scan_idx], boundaries_s); boundaries_spec.push_back(boundaries_s); } setProgress(++progress); } } for (Size i = 0; i < input.getChromatograms().size(); ++i) { MSChromatogram chromatogram; std::vector<PeakBoundary> boundaries_c; // peak boundaries of a single chromatogram pick(input.getChromatograms()[i], chromatogram, boundaries_c); output.addChromatogram(chromatogram); boundaries_chrom.push_back(boundaries_c); setProgress(++progress); } endProgress(); return; }