107 if(parameters.startsWith(QString(
"%1|").arg(
name())))
109 QStringList params = parameters.split(
"|").back().split(
";");
111 if(params.size() != 3)
113 QString(
"Building of FilterLowIntensitySignalRemoval from string '%1' failed. Expected "
114 "name and three parameters.")
124 QString(
"Building of FilterLowIntensitySignalRemoval from string %1 failed")
139 std::size_t trace_size = trace.size();
160 bool was_ascending_to_apex =
false;
163 ApicesSPtr cluster_apices = std::make_shared<ClusterApices>();
183 was_ascending_to_apex =
true;
197 if(!was_ascending_to_apex)
236 if(!cluster_apices->size())
237 qFatal(
"Cannot be that the apices has no apex.");
249 cluster_apices = std::make_shared<ClusterApices>();
337 if(cluster_apices->size())
339 "At this point, the apices should be new and "
369 was_ascending_to_apex =
false;
389 if(cluster_apices->size())
398 Trace::const_iterator iter,
399 double distance_threshold)
405 Trace::const_iterator init_iter = iter;
407 if(iter == trace.cbegin())
411 Trace::const_iterator prev_iter = init_iter;
413 Trace::const_iterator last_apex_iter = init_iter;
416 bool was_ascending_to_apex =
false;
421 while(iter != trace.cbegin())
426 if(abs(init_iter->x - iter->x) >= distance_threshold)
427 return last_apex_iter;
429 if(iter->y > prev_iter->y)
432 was_ascending_to_apex =
true;
438 if(was_ascending_to_apex)
446 last_apex_iter = prev_iter;
461 return last_apex_iter;
467 Trace::const_iterator iter,
468 double distance_threshold)
474 Trace::const_iterator init_iter = iter;
476 if(iter == trace.cend())
480 Trace::const_iterator prev_iter = init_iter;
482 Trace::const_iterator last_apex_iter = init_iter;
485 bool was_ascending_to_apex =
false;
490 while(iter != trace.cend())
499 if(abs(init_iter->x - iter->x) >= distance_threshold)
500 return last_apex_iter;
502 if(iter->y > prev_iter->y)
505 was_ascending_to_apex =
true;
511 if(was_ascending_to_apex)
519 last_apex_iter = prev_iter;
530 return last_apex_iter;
564 Trace::const_iterator left_begin_iter = trace.cend();
565 Trace::const_iterator right_end_iter = trace.cend();
573 Trace::const_iterator begin_iter = *(cluster_apices->begin());
574 Trace::const_iterator end_iter = *(std::prev(cluster_apices->end()));
587 for(Trace::const_iterator iter = left_begin_iter; iter != right_end_iter; ++iter)
589 map_trace[iter->x] = iter->y;
595 map_trace[left_begin_iter->x] = 0;
596 map_trace[std::prev(right_end_iter)->x] = 0;
618 if(trace.size() <= 2)
639 trace = std::move(reconstructed_trace);
656 return QString(
"%1|%2;%3;%4")
667 return "FilterLowIntensitySignalRemoval";
excetion to use when an item type is not recognized
Redefines the floor intensity of the Trace.
Trace & nonConstFilter(Trace &data_points)
std::shared_ptr< ClusterApices > ApicesSPtr
Trace::const_iterator backwardFindApex(const Trace &trace, Trace::const_iterator iter, double distance_threshold)
QString name() const override
FilterLowIntensitySignalRemoval(double mean, double std_dev, double threshold)
double getThreshold() const
Trace reconstructTrace(const Trace &trace)
Trace & filter(Trace &data_points) const override
Trace::const_iterator forwardFindApex(const Trace &trace, Trace::const_iterator iter, double distance_threshold)
std::size_t detectClusterApices(const Trace &trace)
FilterLowIntensitySignalRemoval & operator=(const FilterLowIntensitySignalRemoval &other)
static constexpr double INTRA_CLUSTER_INTER_PEAK_DISTANCE
virtual ~FilterLowIntensitySignalRemoval()
void buildFilterFromString(const QString &strBuildParams) override
build this filter using a string
QString toString() const override
Return a string with the textual representation of the configuration data.
std::vector< ApicesSPtr > m_clusters
A simple container of DataPoint instances.
tries to keep as much as possible monoisotopes, removing any possible C13 peaks and changes multichar...