44 #ifdef DEBUG_PEAK_PICKING 93 template <
typename InputPeakIterator>
95 InputPeakIterator end_input,
98 #ifdef DEBUG_PEAK_PICKING 99 std::cout <<
"ContinuousWaveletTransformNumIntegration::transform: start " << begin_input->getMZ() <<
" until " << (end_input - 1)->getMZ() << std::endl;
101 if (fabs(resolution - 1) < 0.0001)
104 SignedSize n = distance(begin_input, end_input);
111 #ifdef DEBUG_PEAK_PICKING 112 std::cout <<
"---------START TRANSFORM---------- \n";
114 InputPeakIterator help = begin_input;
115 for (
int i = 0; i < n; ++i)
117 signal_[i].setMZ(help->getMZ());
121 #ifdef DEBUG_PEAK_PICKING 122 std::cout <<
"---------END TRANSFORM----------" << std::endl;
125 begin_right_padding_ = n;
126 end_left_padding_ = -1;
131 double origin = begin_input->getMZ();
132 double spacing = ((end_input - 1)->getMZ() - origin) / (n - 1);
134 std::vector<double> processed_input(n);
138 InputPeakIterator it_help = begin_input;
139 processed_input[0] = it_help->getIntensity();
144 x = origin +
k * spacing;
146 while (((it_help + 1) < end_input) && ((it_help + 1)->getMZ() < x))
150 processed_input[
k] = getInterpolatedValue_(x, it_help);
154 for (
Int i = 0; i < n; ++i)
156 signal_[i].setMZ(origin + i * spacing);
160 begin_right_padding_ = n;
161 end_left_padding_ = -1;
175 void init(
double scale,
double spacing)
override;
180 template <
typename InputPeakIterator>
181 double integrate_(InputPeakIterator x, InputPeakIterator first, InputPeakIterator last)
183 #ifdef DEBUG_PEAK_PICKING 184 std::cout <<
"integrate_" << std::endl;
188 double middle_spacing = wavelet_.size() * spacing_;
190 double start_pos = ((x->getMZ() - middle_spacing) > first->getMZ()) ? (x->getMZ() - middle_spacing)
192 double end_pos = ((x->getMZ() + middle_spacing) < (last - 1)->getMZ()) ? (x->getMZ() + middle_spacing)
193 : (last - 1)->getMZ();
195 InputPeakIterator help = x;
197 #ifdef DEBUG_PEAK_PICKING 198 std::cout <<
"integrate from middle to start_pos " << help->getMZ() <<
" until " << start_pos << std::endl;
202 while ((help != first) && ((help - 1)->getMZ() > start_pos))
205 double distance = fabs(x->getMZ() - help->getMZ());
207 if (index_w_r >= wavelet_.size())
209 index_w_r = wavelet_.size() - 1;
211 double wavelet_right = wavelet_[index_w_r];
213 #ifdef DEBUG_PEAK_PICKING 214 std::cout <<
"distance x help " << distance << std::endl;
215 std::cout <<
"distance in wavelet_ " << index_w_r * spacing_ << std::endl;
216 std::cout <<
"wavelet_right " << wavelet_right << std::endl;
220 distance = fabs(x->getMZ() - (help - 1)->getMZ());
222 if (index_w_l >= wavelet_.size())
224 index_w_l = wavelet_.size() - 1;
226 double wavelet_left = wavelet_[index_w_l];
230 #ifdef DEBUG_PEAK_PICKING 231 std::cout <<
" help-1 " << (help - 1)->getMZ() <<
" distance x, help-1" << distance << std::endl;
232 std::cout <<
"distance in wavelet_ " << index_w_l * spacing_ << std::endl;
233 std::cout <<
"wavelet_ at left " << wavelet_left << std::endl;
235 std::cout <<
" intensity " << fabs((help - 1)->getMZ() - help->getMZ()) / 2. <<
" * " << (help - 1)->getIntensity() <<
" * " << wavelet_left <<
" + " << (help)->getIntensity() <<
"* " << wavelet_right
239 v += fabs((help - 1)->getMZ() - help->getMZ()) / 2. * ((help - 1)->getIntensity() * wavelet_left + help->getIntensity() * wavelet_right);
246 #ifdef DEBUG_PEAK_PICKING 247 std::cout <<
"integrate from middle to endpos " << (help)->getMZ() <<
" until " << end_pos << std::endl;
249 while ((help != (last - 1)) && ((help + 1)->getMZ() < end_pos))
252 double distance = fabs(x->getMZ() - help->getMZ());
254 if (index_w_l >= wavelet_.size())
256 index_w_l = wavelet_.size() - 1;
258 double wavelet_left = wavelet_[index_w_l];
260 #ifdef DEBUG_PEAK_PICKING 261 std::cout <<
" help " << (help)->getMZ() <<
" distance x, help" << distance << std::endl;
262 std::cout <<
"distance in wavelet_ " << index_w_l * spacing_ << std::endl;
263 std::cout <<
"wavelet_ at left " << wavelet_left << std::endl;
267 distance = fabs(x->getMZ() - (help + 1)->getMZ());
269 if (index_w_r >= wavelet_.size())
271 index_w_r = wavelet_.size() - 1;
273 double wavelet_right = wavelet_[index_w_r];
275 #ifdef DEBUG_PEAK_PICKING 276 std::cout <<
" help+1 " << (help + 1)->getMZ() <<
" distance x, help+1" << distance << std::endl;
277 std::cout <<
"distance in wavelet_ " << index_w_r * spacing_ << std::endl;
278 std::cout <<
"wavelet_ at right " << wavelet_right << std::endl;
281 v += fabs(help->getMZ() - (help + 1)->getMZ()) / 2. * (help->getIntensity() * wavelet_left + (help + 1)->getIntensity() * wavelet_right);
286 #ifdef DEBUG_PEAK_PICKING 287 std::cout <<
"return" << (v / sqrt(scale_)) << std::endl;
289 return v / sqrt(scale_);
293 double integrate_(
const std::vector<double> & processed_input,
double spacing_data,
int index);
296 inline double marr_(
const double x)
const 298 return (1 - x * x) * exp(-x * x / 2);
std::vector< Peak1D > signal_
The transformed signal.
Definition: ContinuousWaveletTransform.h:217
SignedSize begin_right_padding_
Definition: ContinuousWaveletTransform.h:231
ptrdiff_t SignedSize
Signed Size type e.g. used as pointer difference.
Definition: Types.h:134
size_t Size
Size type e.g. used as variable which can hold result of size()
Definition: Types.h:127
ContinuousWaveletTransform::PeakConstIterator PeakConstIterator
Profile data const iterator type.
Definition: ContinuousWaveletTransformNumIntegration.h:61
std::vector< Peak1D >::const_iterator PeakConstIterator
Raw data const iterator type.
Definition: ContinuousWaveletTransform.h:50
double integrate_(InputPeakIterator x, InputPeakIterator first, InputPeakIterator last)
Computes the convolution of the wavelet and the profile data at position x with resolution = 1...
Definition: ContinuousWaveletTransformNumIntegration.h:181
T round(T x)
Rounds the value.
Definition: MathFunctions.h:138
SignedSize end_left_padding_
Definition: ContinuousWaveletTransform.h:230
void transform(InputPeakIterator begin_input, InputPeakIterator end_input, float resolution)
Computes the wavelet transform of a given profile data interval [begin_input,end_input) ...
Definition: ContinuousWaveletTransformNumIntegration.h:94
double spacing_
Definition: ContinuousWaveletTransform.h:224
double marr_(const double x) const
Computes the Marr wavelet at position x.
Definition: ContinuousWaveletTransformNumIntegration.h:296
double scale_
Spacing and scale of the wavelet and length of the signal.
Definition: ContinuousWaveletTransform.h:223
std::vector< double > wavelet_
The pre-tabulated wavelet used for the transform.
Definition: ContinuousWaveletTransform.h:220
This class computes the continuous wavelet transformation using a marr wavelet.
Definition: ContinuousWaveletTransformNumIntegration.h:56
ContinuousWaveletTransformNumIntegration()
Constructor.
Definition: ContinuousWaveletTransformNumIntegration.h:73
This class is the base class of the continuous wavelet transformation.
Definition: ContinuousWaveletTransform.h:46
SignedSize signal_length_
Definition: ContinuousWaveletTransform.h:225
~ContinuousWaveletTransformNumIntegration() override
Destructor.
Definition: ContinuousWaveletTransformNumIntegration.h:78
Main OpenMS namespace.
Definition: FeatureDeconvolution.h:46