OpenMS
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-2023.
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:
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_;
202  };
203 
207  class OPENMS_GUI_DLLAPI LayerStatisticsFeatureMap : public LayerStatistics
208  {
209  public:
211 
213  const UInt number_of_bins) const override;
214 
215  private:
216  void computeStatistics_() override;
217  const FeatureMap* fm_;
219  };
220 
224  class OPENMS_GUI_DLLAPI LayerStatisticsConsensusMap : public LayerStatistics
225  {
226  public:
228 
230  const UInt number_of_bins) const override;
231 
232  private:
233  void computeStatistics_() override;
234  const ConsensusMap* cm_;
236  };
237 
241  class OPENMS_GUI_DLLAPI LayerStatisticsIdent : public LayerStatistics
242  {
243  public:
245 
247  const UInt number_of_bins) const override;
248 
249  private:
250  void computeStatistics_() override;
253  };
254 
255 } // namespace OpenMS
A container for consensus elements.
Definition: ConsensusMap.h:92
A container for features.
Definition: FeatureMap.h:106
std::vector< PeptideIdentification > PepIds
Definition: IPeptideIds.h:51
Computes statistics and distributions for a PeakMap.
Definition: LayerStatistics.h:225
const ConsensusMap * cm_
Definition: LayerStatistics.h:234
void computeStatistics_() override
compute the range and count statistics. Call this method in the Ctor of derived classes.
Math::Histogram getDistribution(const RangeStatsType &which, const UInt number_of_bins) const override
After computing the overview statistic, you can query a concrete distribution by giving the name of t...
LayerStatisticsConsensusMap(const ConsensusMap &cm)
Computes statistics and distributions for a PeakMap.
Definition: LayerStatistics.h:208
const FeatureMap * fm_
Definition: LayerStatistics.h:217
void computeStatistics_() override
compute the range and count statistics. Call this method in the Ctor of derived classes.
LayerStatisticsFeatureMap(const FeatureMap &fm)
Math::Histogram getDistribution(const RangeStatsType &which, const UInt number_of_bins) const override
After computing the overview statistic, you can query a concrete distribution by giving the name of t...
Computes statistics and distributions for a vector<PeptideIdentifications>
Definition: LayerStatistics.h:242
void computeStatistics_() override
compute the range and count statistics. Call this method in the Ctor of derived classes.
LayerStatisticsIdent(const IPeptideIds::PepIds &cm)
Math::Histogram getDistribution(const RangeStatsType &which, const UInt number_of_bins) const override
After computing the overview statistic, you can query a concrete distribution by giving the name of t...
const IPeptideIds::PepIds * ids_
Definition: LayerStatistics.h:251
Computes statistics and distributions for a PeakMap.
Definition: LayerStatistics.h:192
void computeStatistics_() override
compute the range and count statistics. Call this method in the Ctor of derived classes.
const PeakMap * pm_
Definition: LayerStatistics.h:200
LayerStatisticsPeakMap(const PeakMap &pm)
Math::Histogram getDistribution(const RangeStatsType &which, const UInt number_of_bins) const override
After computing the overview statistic, you can query a concrete distribution by giving the name of t...
Compute summary statistics (count/min/max/avg) about a container, e.g. intensity, charge,...
Definition: LayerStatistics.h:149
void bringInMetaStats_(const MetaInfoInterface *meta_interface)
Brings the meta values of one meta_interface (a peak or feature) into the statistics.
virtual void computeStatistics_()=0
compute the range and count statistics. Call this method in the Ctor of derived classes.
virtual ~LayerStatistics()=default
Make D'tor virtual for correct destruction from pointers to base.
StatsMap overview_range_data_
data on numerical values computed during getOverviewStatistics
Definition: LayerStatistics.h:183
const StatsCounterMap & getCountStatistics() const
obtain count statistics for all meta values which are not numerical
Definition: LayerStatistics.h:162
const StatsMap & getRangeStatistics() const
get all range statistics, any of which can then be plugged into getDistribution()
Definition: LayerStatistics.h:156
StatsCounterMap overview_count_data_
count data on non-numerical values computed during getOverviewStatistics
Definition: LayerStatistics.h:184
virtual Math::Histogram getDistribution(const RangeStatsType &which, const UInt number_of_bins=500) const =0
After computing the overview statistic, you can query a concrete distribution by giving the name of t...
In-Memory representation of a mass spectrometry run.
Definition: MSExperiment.h:72
Representation of a histogram.
Definition: Histogram.h:64
Interface for classes that can store arbitrary meta information (Type-Name-Value tuples).
Definition: MetaInfoInterface.h:61
unsigned int UInt
Unsigned integer type.
Definition: Types.h:94
Main OpenMS namespace.
Definition: FeatureDeconvolution.h:48
static const std::array< const char *,(size_t) RangeStatsSource::SIZE_OF_STATSSOURCE > StatsSourceNames
Names corresponding to elements of enum RangeStatsSource.
Definition: LayerStatistics.h:121
RangeStatsSource
Where did a statistic come from? Useful for display to user, and for internal dispatch when user requ...
Definition: LayerStatistics.h:113
@ METAINFO
statistic was obtained from MetaInfoInterface of container elements, e.g. "FWHM" for FeatureMaps
@ CORE
statistic was obtained from a core data structure of the container, e.g. intensity
@ ARRAYINFO
statistic was obtained from Float/IntegerArrays of the container elements, e.g. "IonMobility" for Pea...
size_t counter
Definition: LayerStatistics.h:108
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
std::map< RangeStatsType, RangeStatsVariant > StatsMap
collection of Min/Max/Avg statistics from different sources. Note: must be sorted,...
Definition: LayerStatistics.h:141
std::variant< RangeStatsInt, RangeStatsDouble > RangeStatsVariant
Definition: LayerStatistics.h:103
a simple counting struct, for non-numerical occurrences of meta-values
Definition: LayerStatistics.h:107
Origin and name of a statistic.
Definition: LayerStatistics.h:125
RangeStatsSource src
Definition: LayerStatistics.h:126
bool operator==(const RangeStatsType &rhs) const
Definition: LayerStatistics.h:134
std::string name
Definition: LayerStatistics.h:127
bool operator<(const RangeStatsType &rhs) const
Definition: LayerStatistics.h:129
Struct representing the statistics about a set of values.
Definition: LayerStatistics.h:63
VALUE_TYPE getMin() const
Definition: LayerStatistics.h:73
VALUE_TYPE min_
Definition: LayerStatistics.h:96
size_t getCount() const
Definition: LayerStatistics.h:83
size_t count_
Definition: LayerStatistics.h:95
double getAvg() const
get the average value from all calls to addDataPoint()
Definition: LayerStatistics.h:89
VALUE_TYPE sum_
Definition: LayerStatistics.h:98
void addDataPoint(VALUE_TYPE v)
Definition: LayerStatistics.h:65
VALUE_TYPE max_
Definition: LayerStatistics.h:97
VALUE_TYPE getMax() const
Definition: LayerStatistics.h:78