OpenMS  3.0.0
LayerStatistics.h
Go to the documentation of this file.
1 // --------------------------------------------------------------------------
2 // OpenMS -- Open-Source Mass Spectrometry
3 // --------------------------------------------------------------------------
4 // Copyright The OpenMS Team -- Eberhard Karls University Tuebingen,
5 // ETH Zurich, and Freie Universitaet Berlin 2002-2022.
6 //
7 // This software is released under a three-clause BSD license:
8 // * Redistributions of source code must retain the above copyright
9 // notice, this list of conditions and the following disclaimer.
10 // * Redistributions in binary form must reproduce the above copyright
11 // notice, this list of conditions and the following disclaimer in the
12 // documentation and/or other materials provided with the distribution.
13 // * Neither the name of any author or any participating institution
14 // may be used to endorse or promote products derived from this software
15 // without specific prior written permission.
16 // For a full list of authors, refer to the file AUTHORS.
17 // --------------------------------------------------------------------------
18 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 // ARE DISCLAIMED. IN NO EVENT SHALL ANY OF THE AUTHORS OR THE CONTRIBUTING
22 // INSTITUTIONS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
25 // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
26 // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
27 // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
28 // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 //
30 // --------------------------------------------------------------------------
31 // $Maintainer: Chris Bielow $
32 // $Authors: Chris Bielow $
33 // --------------------------------------------------------------------------
34 
35 #pragma once
36 
37 // OpenMS_GUI config
38 #include <OpenMS/VISUAL/OpenMS_GUIConfig.h>
39 
40 #include <OpenMS/CONCEPT/Types.h>
44 
45 #include <array>
46 #include <map>
47 #include <string>
48 #include <variant>
49 
50 namespace OpenMS
51 {
52  class MetaInfoInterface;
53  class ConsensusMap;
54  class FeatureMap;
55 
61  template <typename VALUE_TYPE>
62  struct RangeStats
63  {
64  public:
65  void addDataPoint(VALUE_TYPE v)
66  {
67  ++count_;
68  sum_ += v;
69  min_ = std::min(min_, v);
70  max_ = std::max(max_, v);
71  }
72 
73  VALUE_TYPE getMin() const
74  {
75  return min_;
76  }
77 
78  VALUE_TYPE getMax() const
79  {
80  return max_;
81  }
82 
83  size_t getCount() const
84  {
85  return count_;
86  }
87 
89  double getAvg() const
90  {
91  return count_ == 0 ? 0 : double(sum_) / count_;
92  }
93 
94  protected:
95  size_t count_{0};
96  VALUE_TYPE min_{std::numeric_limits<VALUE_TYPE>::max()}; // init with very high value
97  VALUE_TYPE max_{std::numeric_limits<VALUE_TYPE>::lowest()}; // init with lowest (=negative) value possible
98  VALUE_TYPE sum_{0};
99  };
100 
103  using RangeStatsVariant = std::variant<RangeStatsInt, RangeStatsDouble>;
104 
107  {
108  size_t counter{0};
109  };
110 
112  enum class RangeStatsSource
113  {
114  CORE,
115  METAINFO,
116  ARRAYINFO,
118  };
119 
121  static const std::array<const char*, (size_t)RangeStatsSource::SIZE_OF_STATSSOURCE> StatsSourceNames = {"core statistics", "meta values", "data arrays"};
122 
125  {
127  std::string name;
128 
129  bool operator<(const RangeStatsType& rhs) const
130  {
131  return std::tie(src, name) < std::tie(rhs.src, rhs.name);
132  }
133 
134  bool operator==(const RangeStatsType& rhs) const
135  {
136  return src == rhs.src && name == rhs.name;
137  }
138  };
139 
141  using StatsMap = std::map<RangeStatsType, RangeStatsVariant>;
143  using StatsCounterMap = std::map<std::string, StatsCounter>;
144 
148  class OPENMS_GUI_DLLAPI LayerStatistics
149  {
150  public:
151 
153  virtual ~LayerStatistics() = default;
154 
157  {
158  return overview_range_data_;
159  }
160 
163  {
164  return overview_count_data_;
165  }
166 
174  virtual Math::Histogram<> getDistribution(const RangeStatsType& which, const UInt number_of_bins = 500) const = 0;
175 
176 
177  protected:
179  virtual void computeStatistics_() = 0;
181  void bringInMetaStats_(const MetaInfoInterface* meta_interface);
182 
185  };
186 
190  class OPENMS_GUI_DLLAPI LayerStatisticsPeakMap
191  : public LayerStatistics
192  {
193  public:
194  LayerStatisticsPeakMap(const PeakMap& pm);
195 
196  Math::Histogram<> getDistribution(const RangeStatsType& which, const UInt number_of_bins) const override;
197 
198  private:
199  void computeStatistics_() override;
200  const PeakMap* pm_;
201  };
203 
207  class OPENMS_GUI_DLLAPI LayerStatisticsFeatureMap : public LayerStatistics
208  {
209  public:
211 
212  Math::Histogram<> getDistribution(const RangeStatsType& which,
213  const UInt number_of_bins) const override;
214 
215  private:
216  void computeStatistics_() override;
217  const FeatureMap* fm_;
218  };
220 
224  class OPENMS_GUI_DLLAPI LayerStatisticsConsensusMap : public LayerStatistics
225  {
226  public:
228 
229  Math::Histogram<> getDistribution(const RangeStatsType& which,
230  const UInt number_of_bins) const override;
231 
232  private:
233  void computeStatistics_() override;
234  const ConsensusMap* cm_;
235  };
237 
241  class OPENMS_GUI_DLLAPI LayerStatisticsIdent : public LayerStatistics
242  {
243  public:
245 
246  Math::Histogram<> getDistribution(const RangeStatsType& which,
247  const UInt number_of_bins) const override;
248 
249  private:
250  void computeStatistics_() override;
252  };
254 
255 } // namespace OpenMS
bool operator<(const RangeStatsType &rhs) const
Definition: LayerStatistics.h:129
void addDataPoint(VALUE_TYPE v)
Definition: LayerStatistics.h:65
std::variant< RangeStatsInt, RangeStatsDouble > RangeStatsVariant
Definition: LayerStatistics.h:103
Origin and name of a statistic.
Definition: LayerStatistics.h:124
a simple counting struct, for non-numerical occurrences of meta-values
Definition: LayerStatistics.h:106
statistic was obtained from Float/IntegerArrays of the container elements, e.g. "IonMobility" for Pea...
Compute summary statistics (count/min/max/avg) about a container, e.g. intensity, charge...
Definition: LayerStatistics.h:148
A container for features.
Definition: FeatureMap.h:98
unsigned int UInt
Unsigned integer type.
Definition: Types.h:94
A container for consensus elements.
Definition: ConsensusMap.h:82
const FeatureMap * fm_
Definition: LayerStatistics.h:217
Main OpenMS namespace.
Definition: FeatureDeconvolution.h:47
const PeakMap * pm_
Definition: LayerStatistics.h:200
Computes statistics and distributions for a vector<PeptideIdentifications>
Definition: LayerStatistics.h:241
VALUE_TYPE max_
Definition: LayerStatistics.h:97
VALUE_TYPE getMax() const
Definition: LayerStatistics.h:78
Computes statistics and distributions for a PeakMap.
Definition: LayerStatistics.h:224
statistic was obtained from MetaInfoInterface of container elements, e.g. "FWHM" for FeatureMaps ...
Computes statistics and distributions for a PeakMap.
Definition: LayerStatistics.h:207
double getAvg() const
get the average value from all calls to addDataPoint()
Definition: LayerStatistics.h:89
const IPeptideIds::PepIds * ids_
Definition: LayerStatistics.h:251
Computes statistics and distributions for a PeakMap.
Definition: LayerStatistics.h:190
RangeStatsSource src
Definition: LayerStatistics.h:126
Representation of a histogram.
Definition: Histogram.h:63
VALUE_TYPE min_
Definition: LayerStatistics.h:96
const ConsensusMap * cm_
Definition: LayerStatistics.h:234
static const std::array< const char *,(size_t) RangeStatsSource::SIZE_OF_STATSSOURCE > StatsSourceNames
Names corresponding to elements of enum RangeStatsSource.
Definition: LayerStatistics.h:121
Interface for classes that can store arbitrary meta information (Type-Name-Value tuples).
Definition: MetaInfoInterface.h:60
RangeStatsSource
Where did a statistic come from? Useful for display to user, and for internal dispatch when user requ...
Definition: LayerStatistics.h:112
In-Memory representation of a mass spectrometry run.
Definition: MSExperiment.h:70
size_t getCount() const
Definition: LayerStatistics.h:83
size_t count_
Definition: LayerStatistics.h:95
const StatsCounterMap & getCountStatistics() const
obtain count statistics for all meta values which are not numerical
Definition: LayerStatistics.h:162
std::map< RangeStatsType, RangeStatsVariant > StatsMap
collection of Min/Max/Avg statistics from different sources. Note: must be sorted, i.e. do not switch to unordered_map!
Definition: LayerStatistics.h:141
StatsCounterMap overview_count_data_
count data on non-numerical values computed during getOverviewStatistics
Definition: LayerStatistics.h:184
Struct representing the statistics about a set of values.
Definition: LayerStatistics.h:62
VALUE_TYPE sum_
Definition: LayerStatistics.h:98
size_t counter
Definition: LayerStatistics.h:108
StatsMap overview_range_data_
data on numerical values computed during getOverviewStatistics
Definition: LayerStatistics.h:183
bool operator==(const RangeStatsType &rhs) const
Definition: LayerStatistics.h:134
std::map< std::string, StatsCounter > StatsCounterMap
collection of MetaValues which are not numeric (counts only the number of occurrences per metavalue) ...
Definition: LayerStatistics.h:143
statistic was obtained from a core data structure of the container, e.g. intensity ...
const StatsMap & getRangeStatistics() const
get all range statistics, any of which can then be plugged into getDistribution() ...
Definition: LayerStatistics.h:156
std::vector< PeptideIdentification > PepIds
Definition: IPeptideIds.h:51
VALUE_TYPE getMin() const
Definition: LayerStatistics.h:73
std::string name
Definition: LayerStatistics.h:127