libpappsomspp
Library for mass spectrometry
filterlowintensitysignalremoval.h
Go to the documentation of this file.
1 /* BEGIN software license
2  *
3  * msXpertSuite - mass spectrometry software suite
4  * -----------------------------------------------
5  * Copyright(C) 2009,...,2021 Filippo Rusconi
6  *
7  * http://www.msxpertsuite.org
8  *
9  * This file is part of the msXpertSuite project.
10  *
11  * The msXpertSuite project is the successor of the massXpert project. This
12  * project now includes various independent modules:
13  *
14  * - massXpert, model polymer chemistries and simulate mass spectrometric data;
15  * - mineXpert, a powerful TIC chromatogram/mass spectrum viewer/miner;
16  *
17  * This program is free software: you can redistribute it and/or modify
18  * it under the terms of the GNU General Public License as published by
19  * the Free Software Foundation, either version 3 of the License, or
20  * (at your option) any later version.
21  *
22  * This program is distributed in the hope that it will be useful,
23  * but WITHOUT ANY WARRANTY; without even the implied warranty of
24  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25  * GNU General Public License for more details.
26  *
27  * You should have received a copy of the GNU General Public License
28  * along with this program. If not, see <http://www.gnu.org/licenses/>.
29  *
30  * END software license
31  */
32 
33 
34 #pragma once
35 
36 
37 #include <QObject>
38 
39 #include "../../trace/trace.h"
40 #include "../../exportinmportconfig.h"
41 #include "filternameinterface.h"
42 
43 
44 namespace pappso
45 {
46 
47 
48 class FilterLowIntensitySignalRemoval;
49 
50 typedef std::shared_ptr<FilterLowIntensitySignalRemoval>
52 typedef std::shared_ptr<const FilterLowIntensitySignalRemoval>
54 
55 
56 /**
57  * @brief Redefines the floor intensity of the Trace
58  *
59  * The amplitude of the trace is computed (maxValue - minValue)
60  * Its fraction is calculated = amplitude * (percentage / 100)
61  * The threshold value is computed as (minValue + fraction)
62  *
63  * When the values to be filtered are below that threshold they acquire that
64  * threshold value.
65  *
66  * When the values to be filtered are above that threshold they remain
67  * unchanged.
68  *
69  * This effectively re-floors the values to threshold.
70  */
72  : public FilterNameInterface
73 {
74  // We need this std::pair entity:
75  using IndexIntensity = std::pair<std::size_t, double>;
76 
77  public:
79  double std_dev,
80  double threshold);
81  FilterLowIntensitySignalRemoval(const QString &parameters);
83 
85 
87  operator=(const FilterLowIntensitySignalRemoval &other);
88 
89  Trace &filter(Trace &data_points) const override;
90 
91  double getThreshold() const;
92  QString name() const override;
93 
94  QString toString() const override;
95 
96  protected:
97  void buildFilterFromString(const QString &strBuildParams) override;
98  Trace &nonConstFilter(Trace &data_points);
99 
100  private:
101  const double nan = std::numeric_limits<double>::quiet_NaN();
102 
103  double m_threshold;
104  double m_noiseMean;
106 
107  constexpr static double INTRA_CLUSTER_INTER_PEAK_DISTANCE = 1.1;
108 
110  const std::size_t m_minIntPointCount = 5;
111  const std::size_t m_minIntStdDevFactor = 2;
112 
113  double m_min;
114  double m_max;
115  double m_minMean;
116  double m_minStdDev;
117  double m_noiseLevel;
118 
119  bool m_seen_upward_phase = false;
120 
121  IndexIntensity m_prevApex = std::pair(0, nan);
122  IndexIntensity m_curApex = std::pair(0, nan);
123  IndexIntensity m_cur = std::pair(0, nan);
124  IndexIntensity m_prev = std::pair(0, nan);
125 
126  using ApexSPtr = std::shared_ptr<IndexIntensity>;
127  using Cluster = std::vector<ApexSPtr>;
128  using ClusterSPtr = std::shared_ptr<std::vector<ApexSPtr>>;
129 
130  // The isotopic clusters are stored as vectors of IndexIntensity shared_ptr.
131  std::vector<ClusterSPtr> m_isotopicClusters;
132 
133  std::size_t detectIsotopicClusters(const Trace &trace);
134 };
135 } // namespace pappso
Redefines the floor intensity of the Trace.
std::shared_ptr< std::vector< ApexSPtr > > ClusterSPtr
Interface that allows to build filter objects from strings.
A simple container of DataPoint instances.
Definition: trace.h:132
#define PMSPP_LIB_DECL
tries to keep as much as possible monoisotopes, removing any possible C13 peaks and changes multichar...
Definition: aa.cpp:39
std::shared_ptr< const FilterLowIntensitySignalRemoval > FilterLowIntensitySignalRemovalCstSPtr
std::shared_ptr< FilterLowIntensitySignalRemoval > FilterLowIntensitySignalRemovalSPtr