81 defaults_.setValue(
"spacing", 0.05,
"Spacing of the resampled output peaks.");
82 defaults_.setValue(
"ppm",
"false",
"Whether spacing is in ppm or Th");
95 template <
class PeakContainerT>
96 void raster(PeakContainerT& container)
99 if (container.empty())
return;
101 auto first = container.begin();
102 auto last = container.end();
104 double end_pos = (last - 1)->getPos();
105 double start_pos = first->getPos();
106 int number_resampled_points = (int)(ceil((end_pos - start_pos) / spacing_ + 1));
108 std::vector<typename PeakContainerT::PeakType> resampled_peak_container;
109 populate_raster_(resampled_peak_container, start_pos, end_pos, number_resampled_points);
111 raster(container.begin(), container.end(), resampled_peak_container.begin(), resampled_peak_container.end());
113 container.swap(resampled_peak_container);
130 template <
typename PeakContainerT>
131 void raster_align(PeakContainerT& container,
double start_pos,
double end_pos)
134 if (container.empty())
return;
136 if (end_pos < start_pos)
138 std::vector<typename PeakContainerT::PeakType> empty;
139 container.swap(empty);
143 auto first = container.begin();
144 auto last = container.end();
146 verifySpacing_(first, last, [](
auto x){
return x->getPos();});
149 while (first != container.end() && (first)->getPos() < start_pos) {++first;}
150 while (last != first && (last - 1)->getPos() > end_pos) {--last;}
152 int number_resampled_points = (int)(ceil((end_pos - start_pos) / spacing_ + 1));
154 std::vector<typename PeakContainerT::PeakType> resampled_peak_container;
155 populate_raster_(resampled_peak_container, start_pos, end_pos, number_resampled_points);
157 raster(first, last, resampled_peak_container.begin(), resampled_peak_container.end());
159 container.swap(resampled_peak_container);
183 template <
typename PeakTypeIterator,
typename ConstPeakTypeIterator>
184 void raster(ConstPeakTypeIterator raw_it, ConstPeakTypeIterator raw_end, PeakTypeIterator resampled_begin, PeakTypeIterator resampled_end)
186 OPENMS_PRECONDITION(resampled_begin != resampled_end,
"Output iterators cannot be identical")
189 verifySpacing_(raw_it, raw_end, [](
auto x){
return x->getPos();});
191 PeakTypeIterator resample_start = resampled_begin;
194 while (raw_it != raw_end && raw_it->getPos() < resampled_begin->getPos())
196 resampled_begin->setIntensity(resampled_begin->getIntensity() + raw_it->getIntensity());
200 while (raw_it != raw_end)
203 while (resampled_begin != resampled_end && resampled_begin->getPos() < raw_it->getPos()) {resampled_begin++;}
204 if (resampled_begin != resample_start) {resampled_begin--;}
207 if ((resampled_begin + 1) == resampled_end) {
break;}
209 double dist_left = fabs(raw_it->getPos() - resampled_begin->getPos());
210 double dist_right = fabs(raw_it->getPos() - (resampled_begin + 1)->getPos());
213 resampled_begin->setIntensity(resampled_begin->getIntensity() + raw_it->getIntensity() * dist_right / (dist_left + dist_right));
214 (resampled_begin + 1)->setIntensity((resampled_begin + 1)->getIntensity() + raw_it->getIntensity() * dist_left / (dist_left + dist_right));
220 while (raw_it != raw_end)
222 resampled_begin->setIntensity(resampled_begin->getIntensity() + raw_it->getIntensity());
253 template <
typename PeakTypeIterator,
typename ConstPeakTypeIterator>
254 void raster(ConstPeakTypeIterator mz_raw_it, ConstPeakTypeIterator mz_raw_end,
255 ConstPeakTypeIterator int_raw_it, ConstPeakTypeIterator int_raw_end,
256 ConstPeakTypeIterator mz_resample_it, ConstPeakTypeIterator mz_resample_end,
257 PeakTypeIterator int_resample_it, PeakTypeIterator int_resample_end)
260 (void)int_resample_end;
261 OPENMS_PRECONDITION(mz_resample_it != mz_resample_end,
"Output iterators cannot be identical")
262 OPENMS_PRECONDITION(std::distance(mz_resample_it, mz_resample_end) == std::distance(int_resample_it, int_resample_end),
263 "Resample m/z and intensity iterators need to cover the same distance")
264 OPENMS_PRECONDITION(std::distance(mz_raw_it, mz_raw_end) == std::distance(int_raw_it, int_raw_end),
265 "Raw m/z and intensity iterators need to cover the same distance")
268 verifySpacing_(mz_raw_it, mz_raw_end, [](
auto x){
return *x;});
270 PeakTypeIterator mz_resample_start = mz_resample_it;
273 while (mz_raw_it != mz_raw_end && (*mz_raw_it) < (*mz_resample_it) )
275 (*int_resample_it) = *int_resample_it + *int_raw_it;
280 while (mz_raw_it != mz_raw_end)
283 while (mz_resample_it != mz_resample_end && *mz_resample_it < *mz_raw_it)
285 ++mz_resample_it; ++int_resample_it;
287 if (mz_resample_it != mz_resample_start)
289 --mz_resample_it; --int_resample_it;
293 if ((mz_resample_it + 1) == mz_resample_end) {
break;}
295 double dist_left = fabs(*mz_raw_it - *mz_resample_it);
296 double dist_right = fabs(*mz_raw_it - *(mz_resample_it + 1));
299 *(int_resample_it) = *int_resample_it + (*int_raw_it) * dist_right / (dist_left + dist_right);
300 *(int_resample_it + 1) = *(int_resample_it + 1) + (*int_raw_it) * dist_left / (dist_left + dist_right);
307 while (mz_raw_it != mz_raw_end)
309 *int_resample_it = *int_resample_it + (*int_raw_it);
331 template <
typename PeakTypeIterator>
332 void raster_interpolate(PeakTypeIterator raw_it, PeakTypeIterator raw_end, PeakTypeIterator resampled_start, PeakTypeIterator resampled_end)
337 verifySpacing_(raw_it, raw_end, [](PeakTypeIterator x){
return x->getPos();});
339 PeakTypeIterator raw_start = raw_it;
342 while (resampled_start != resampled_end && resampled_start->getPos() < raw_it->getPos()) {resampled_start++;}
344 while (resampled_start != resampled_end)
347 while (raw_it != raw_end && raw_it->getPos() < resampled_start->getPos()) {raw_it++;}
348 if (raw_it != raw_start) {raw_it--;}
351 if ((raw_it + 1) == raw_end) {
break;}
354 double m = ((raw_it + 1)->getIntensity() - raw_it->getIntensity()) / ((raw_it + 1)->getPos() - raw_it->getPos());
355 resampled_start->setIntensity(raw_it->getIntensity() + (resampled_start->getPos() - raw_it->getPos()) * m);
370 startProgress(0, exp.
size(),
"resampling of data");
371 for (
Size i = 0; i < exp.
size(); ++i)
390 spacing_ = param_.getValue(
"spacing");
391 ppm_ = (bool)param_.getValue(
"ppm").toBool();
395 template <
typename PeakType>
397 double start_pos,
double end_pos,
int number_resampled_points)
402 resampled_peak_container.resize(number_resampled_points);
403 typename std::vector<PeakType>::iterator it = resampled_peak_container.begin();
404 for (
int i = 0; i < number_resampled_points; ++i)
406 it->setPos(start_pos + i * spacing_);
413 double current_mz = start_pos;
414 while (current_mz < end_pos)
418 p.setPos(current_mz);
419 resampled_peak_container.push_back(p);
422 current_mz += current_mz * (spacing_ / 1e6);
429 template <
typename PeakTypeIterator>
435 if (it == end || std::next(it) == end)
return;
436 double min_dist = std::numeric_limits<double>::infinity();
437 double current_dist{};
439 while (std::next(it) != end)
441 current_dist = (access(std::next(it)) - access(it));
442 if (min_dist > current_dist) min_dist = current_dist;
449 <<
") is smaller than the smallest distance between data points ("
450 << min_dist <<
"). This approximates the detector dead time and may produce spurious peaks.\n";
#define OPENMS_LOG_WARN
Macro for warnings.
Definition LogStream.h:583
A base class for all classes handling default parameters.
Definition DefaultParamHandler.h:66
Internal RAII guard for temporary resampling warning suppression.
Definition LinearResamplerAlign.h:35
ScopedResamplingWarningSuppression(bool suppress=true)
Definition LinearResamplerAlign.h:37
bool previous_
Definition LinearResamplerAlign.h:51
~ScopedResamplingWarningSuppression()
Definition LinearResamplerAlign.h:42
ScopedResamplingWarningSuppression & operator=(const ScopedResamplingWarningSuppression &)=delete
ScopedResamplingWarningSuppression(const ScopedResamplingWarningSuppression &)=delete
Linear Resampling of raw data with alignment.
Definition LinearResamplerAlign.h:76
void raster(ConstPeakTypeIterator raw_it, ConstPeakTypeIterator raw_end, PeakTypeIterator resampled_begin, PeakTypeIterator resampled_end)
Resample points (e.g. Peak1D) from an input range onto a prepopulated output range with given m/z,...
Definition LinearResamplerAlign.h:184
double spacing_
Spacing of the resampled data.
Definition LinearResamplerAlign.h:383
LinearResamplerAlign()
Definition LinearResamplerAlign.h:79
void raster_align(PeakContainerT &container, double start_pos, double end_pos)
Applies the resampling algorithm to a container (MSSpectrum or MSChromatogram) with fixed coordinates...
Definition LinearResamplerAlign.h:131
void raster_interpolate(PeakTypeIterator raw_it, PeakTypeIterator raw_end, PeakTypeIterator resampled_start, PeakTypeIterator resampled_end)
Applies the resampling algorithm using a linear interpolation.
Definition LinearResamplerAlign.h:332
void raster(PeakContainerT &container)
Applies the resampling algorithm to a container (MSSpectrum or MSChromatogram).
Definition LinearResamplerAlign.h:96
bool ppm_
Whether spacing_ is interpreted in ppm (true) or Th (false)
Definition LinearResamplerAlign.h:386
void updateMembers_() override
This method is used to update extra member variables at the end of the setParameters() method.
Definition LinearResamplerAlign.h:388
void populate_raster_(std::vector< PeakType > &resampled_peak_container, double start_pos, double end_pos, int number_resampled_points)
Generate raster for resampled peak container.
Definition LinearResamplerAlign.h:396
void rasterExperiment(PeakMap &exp)
Applies the resampling algorithm to all spectra of an MSExperiment.
Definition LinearResamplerAlign.h:368
void raster(ConstPeakTypeIterator mz_raw_it, ConstPeakTypeIterator mz_raw_end, ConstPeakTypeIterator int_raw_it, ConstPeakTypeIterator int_raw_end, ConstPeakTypeIterator mz_resample_it, ConstPeakTypeIterator mz_resample_end, PeakTypeIterator int_resample_it, PeakTypeIterator int_resample_end)
Resample points (with m/z and intensity in separate containers, but of same length) from an input ran...
Definition LinearResamplerAlign.h:254
void verifySpacing_(PeakTypeIterator it, PeakTypeIterator end, auto access)
helper function to warn the user when the resampling rate is too high
Definition LinearResamplerAlign.h:430
In-Memory representation of a mass spectrometry run.
Definition MSExperiment.h:49
Size size() const noexcept
The number of spectra.
A 2-dimensional raw data point or peak.
Definition Peak2D.h:30
void setIntensity(IntensityType intensity)
Sets data point intensity (height)
Definition Peak2D.h:149
Base class for all classes that want to report their progress.
Definition ProgressLogger.h:27
size_t Size
Size type e.g. used as variable which can hold result of size()
Definition Types.h:97
#define OPENMS_PRECONDITION(condition, message)
Precondition macro.
Definition openms/include/OpenMS/CONCEPT/Macros.h:94
Main OpenMS namespace.
Definition openswathalgo/include/OpenMS/OPENSWATHALGO/DATAACCESS/ISpectrumAccess.h:19
std::atomic< bool > suppress_resampling_spacing_warning
Shared process-wide flag to suppress repeated resampling-spacing warnings. During OpenSwathWorkflow e...