95     template <
typename ExperimentT>
 
   99                               double mz_extraction_window,
 
  101                               double rt_extraction_window,
 
  107       Size input_size = input.size();
 
  113       int used_filter = getFilterNr_(filter);
 
  114       populatePeptideRTMap_(transition_exp, rt_extraction_window);
 
  122       std::vector<typename ExperimentT::ChromatogramType> chromatograms;
 
  123       prepareSpectra_(settings, chromatograms, transition_exp);
 
  126       startProgress(0, input_size, 
"Extracting chromatograms");
 
  127       for (
Size scan_idx = 0; scan_idx < input_size; ++scan_idx)
 
  129         setProgress(scan_idx);
 
  131         if (input[scan_idx].size() == 0)
 
  137         double integrated_intensity = 0;
 
  143         for (
Size k = 0; 
k < chromatograms.size(); ++
k)
 
  146           double current_rt = input[scan_idx].getRT();
 
  147           if (outsideExtractionWindow_(transition_exp.
getTransitions()[
k], current_rt, trafo, rt_extraction_window))
 
  155           if (used_filter == 1)
 
  157             extract_value_tophat(input[scan_idx], mz, peak_idx, integrated_intensity, mz_extraction_window, ppm);
 
  159           else if (used_filter == 2)
 
  161             extract_value_bartlett(input[scan_idx], mz, peak_idx, integrated_intensity, mz_extraction_window, ppm);
 
  166           p.setIntensity(integrated_intensity);
 
  167           chromatograms[
k].push_back(p);
 
  173       output.setChromatograms(chromatograms);
 
  194                               std::vector< OpenSwath::ChromatogramPtr >& output,
 
  195                               const std::vector<ExtractionCoordinates>& extraction_coordinates,
 
  196                               double mz_extraction_window,
 
  201           extraction_coordinates, mz_extraction_window, ppm, -1, filter);
 
  223                               std::vector< OpenSwath::ChromatogramPtr >& output,
 
  224                               const std::vector<ExtractionCoordinates>& extraction_coordinates,
 
  225                               double mz_extraction_window,
 
  227                               double im_extraction_window,
 
  231           extraction_coordinates, mz_extraction_window, ppm, im_extraction_window, filter);
 
  255     static void prepare_coordinates(std::vector< OpenSwath::ChromatogramPtr > & output_chromatograms,
 
  256                                     std::vector< ExtractionCoordinates > & coordinates,
 
  258                                     const double rt_extraction_window,
 
  259                                     const bool ms1 = 
false,
 
  260                                     const int ms1_isotopes = 0);
 
  262     static void prepare_coordinates(std::vector< OpenSwath::ChromatogramPtr > & output_chromatograms,
 
  263                                     std::vector< ExtractionCoordinates > & coordinates,
 
  265                                     const double rt_extraction_window,
 
  266                                     const bool ms1 = 
false,
 
  267                                     const int ms1_isotopes = 0);
 
  283     template <
typename TransitionExpT>
 
  285                                     const std::vector< ChromatogramExtractor::ExtractionCoordinates > & coordinates,
 
  286                                     TransitionExpT& transition_exp_used,
 
  288                                     std::vector<OpenMS::MSChromatogram > & output_chromatograms,
 
  290                                     double im_extraction_width = 0.0)
 
  292       typedef std::map<String, const typename TransitionExpT::Transition* > TransitionMapType;
 
  293       TransitionMapType trans_map;
 
  294       for (
Size i = 0; i < transition_exp_used.getTransitions().size(); i++)
 
  296         trans_map[transition_exp_used.getTransitions()[i].getNativeID()] = &transition_exp_used.getTransitions()[i];
 
  299       for (
Size i = 0; i < chromatograms.size(); i++)
 
  322           if (!transition_group_id.empty())
 
  325             String r = extract_id_(transition_exp_used, transition_group_id, prec_charge);
 
  332           typename TransitionExpT::Transition transition = (*trans_map[coord.
id]);
 
  334           prec.
setMZ(transition.getPrecursorMZ());
 
  343           prod.
setMZ(transition.getProductMZ());
 
  349           if (!transition.getPeptideRef().empty())
 
  352             String r = extract_id_(transition_exp_used, transition.getPeptideRef(), prec_charge);
 
  359             String r = extract_id_(transition_exp_used, transition.getCompoundRef(), prec_charge);
 
  365         if (coord.
ion_mobility >= 0 && im_extraction_width > 0.0)
 
  383         output_chromatograms.push_back(chrom);
 
  388     template <
typename SpectrumT>
 
  392                               double& integrated_intensity,
 
  393                               const double extract_window,
 
  396       integrated_intensity = 0;
 
  397       if (input.size() == 0)
 
  406         left  = mz - mz * extract_window / 2.0 * 1.0e-6;
 
  407         right = mz + mz * extract_window / 2.0 * 1.0e-6;
 
  411         left  = mz - extract_window / 2.0;
 
  412         right = mz + extract_window / 2.0;
 
  418       while (peak_idx < input.size() && input[peak_idx].getMZ() < mz)
 
  427       if (peak_idx >= input.size())
 
  429         walker = input.size() - 1;
 
  433       if (input[walker].getMZ() > left && input[walker].getMZ() < right)
 
  435         integrated_intensity += input[walker].getIntensity();
 
  446         if (walker == 0 && input[walker].getMZ() > left && input[walker].getMZ() < right)
 
  448           integrated_intensity += input[walker].getIntensity();
 
  451       while (walker > 0 && input[walker].getMZ() > left && input[walker].getMZ() < right)
 
  453         integrated_intensity += input[walker].getIntensity(); walker--;
 
  459       if (walker < input.size() )
 
  463       while (walker < input.size() && input[walker].getMZ() > left &&  input[walker].getMZ() < right)
 
  465         integrated_intensity += input[walker].getIntensity(); walker++;
 
  470     template <
typename SpectrumT>
 
  474                                 double& integrated_intensity,
 
  475                                 const double extract_window,
 
  478       integrated_intensity = 0;
 
  479       if (input.size() == 0)
 
  485       double left, right, half_window_size, weight;
 
  488         half_window_size = mz * extract_window / 2.0 * 1.0e-6;
 
  489         left  = mz - mz * extract_window / 2.0 * 1.0e-6;
 
  490         right = mz + mz * extract_window / 2.0 * 1.0e-6;
 
  494         half_window_size = extract_window / 2.0;
 
  495         left  = mz - extract_window / 2.0;
 
  496         right = mz + extract_window / 2.0;
 
  502       while (peak_idx < input.size() && input[peak_idx].getMZ() < mz)
 
  511       if (peak_idx >= input.size())
 
  513         walker = input.size() - 1;
 
  517       if (input[walker].getMZ() > left && input[walker].getMZ() < right)
 
  519         weight =  1 - fabs(input[walker].getMZ() - mz) / half_window_size;
 
  520         integrated_intensity += input[walker].getIntensity() * weight;
 
  531         if (walker == 0 && input[walker].getMZ() > left && input[walker].getMZ() < right)
 
  533           integrated_intensity += input[walker].getIntensity();
 
  536       while (walker > 0 && input[walker].getMZ() > left && input[walker].getMZ() < right)
 
  538         weight =  1 - fabs(input[walker].getMZ() - mz) / half_window_size;
 
  539         integrated_intensity += input[walker].getIntensity() * weight; walker--;
 
  545       if (walker < input.size() )
 
  549       while (walker<input.size() && input[walker].getMZ()> left &&  input[walker].getMZ() < right)
 
  551         weight = 1 - fabs(input[walker].getMZ() - mz) / half_window_size;
 
  552         integrated_intensity += input[walker].getIntensity() * weight; walker++;
 
  565     template <
typename TransitionExpT>
 
  566     static String extract_id_(TransitionExpT& transition_exp_used, 
const String& 
id, 
int& prec_charge);
 
  582     template <
class SpectrumSettingsT, 
class ChromatogramT>
 
  584                          std::vector<ChromatogramT>& chromatograms,
 
  596         if (settings.getPrecursors().size() > 0)
 
  604         for (
Size pep_idx = 0; pep_idx < transition_exp.
getPeptides().size(); pep_idx++)
 
  607           if (pep->
id == pepref)
 
  614         for (
Size comp_idx = 0; comp_idx < transition_exp.
getCompounds().size(); comp_idx++)
 
  617           if (comp->
id == compref)
 
  625         chrom.setPrecursor(prec);
 
  630         chrom.setProduct(prod);
 
  633         chrom.setInstrumentSettings(settings.getInstrumentSettings());
 
  634         chrom.setAcquisitionInfo(settings.getAcquisitionInfo());
 
  635         chrom.setSourceFile(settings.getSourceFile());
 
  637         for (
Size j = 0; j < settings.getDataProcessing().size(); ++j)
 
  639           settings.getDataProcessing()[j]->setMetaValue(
"performed_on_spectra", 
"true");
 
  640           chrom.getDataProcessing().push_back(settings.getDataProcessing()[j]);
 
  646         chromatograms.push_back(chrom);
 
  655                                   double rt_extraction_window);
 
  658     int getFilterNr_(
const String& filter);
 
  662                                double rt_extraction_window);
 
  675     prec_charge = comp.
charge;
 
  702       if (
c.hasCharge()) {prec_charge = 
c.getChargeState();}