| OpenMS 2.5.0

ClusterHierarchical.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-2020.
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
32 // You should have received a copy of the GNU Lesser General Public
33 // License along with this library; if not, write to the Free Software
34 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
35 //
36 // --------------------------------------------------------------------------
37 // $Maintainer: Mathias Walzer $
38 // $Authors: $
39 // --------------------------------------------------------------------------
40 //
41 #pragma once
42
43 #include <OpenMS/KERNEL/StandardTypes.h>
44 #include <OpenMS/DATASTRUCTURES/DistanceMatrix.h>
45 #include <OpenMS/COMPARISON/CLUSTERING/ClusterFunctor.h>
46 #include <OpenMS/COMPARISON/CLUSTERING/ClusterAnalyzer.h>
47 #include <OpenMS/COMPARISON/SPECTRA/PeakSpectrumCompareFunctor.h>
48 #include <OpenMS/COMPARISON/SPECTRA/BinnedSpectrum.h>
49 #include <OpenMS/COMPARISON/SPECTRA/BinnedSpectrumCompareFunctor.h>
50 #include <OpenMS/CONCEPT/Exception.h>
51
52 #include <vector>
53
54 namespace OpenMS
55 {
56
63 class OPENMS_DLLAPI ClusterHierarchical
64 {
65 private:
66
68 double threshold_;
69
70 public:
72 ClusterHierarchical() :
73 threshold_(1.0)
74 {
75 }
76
78 ClusterHierarchical(const ClusterHierarchical & source) :
79 threshold_(source.threshold_)
80 {
81 }
82
84 virtual ~ClusterHierarchical()
85 {
86 }
87
111 template <typename Data, typename SimilarityComparator>
112 void cluster(std::vector<Data> & data,
113 const SimilarityComparator & comparator,
114 const ClusterFunctor & clusterer,
115 std::vector<BinaryTreeNode> & cluster_tree,
116 DistanceMatrix<float> & original_distance)
117 {
118 if (original_distance.dimensionsize() != data.size())
119 {
120 // create distance matrix for data using comparator
121 original_distance.clear();
122 original_distance.resize(data.size(), 1);
123 for (Size i = 0; i < data.size(); i++)
124 {
125 for (Size j = 0; j < i; j++)
126 {
127 // distance value is 1-similarity value, since similarity is in range of [0,1]
128 original_distance.setValueQuick(i, j, 1 - comparator(data[i], data[j]));
129 }
130 }
131 }
132
133 // create clustering with ClusterMethod, DistanceMatrix and Data
134 clusterer(original_distance, cluster_tree, threshold_);
135 }
136
154 void cluster(std::vector<PeakSpectrum> & data,
155 const BinnedSpectrumCompareFunctor & comparator,
156 double sz,
157 UInt sp,
158 float offset,
159 const ClusterFunctor & clusterer,
160 std::vector<BinaryTreeNode> & cluster_tree,
161 DistanceMatrix<float> & original_distance)
162 {
163 std::vector<BinnedSpectrum> binned_data;
164 binned_data.reserve(data.size());
165
166 //transform each PeakSpectrum to a corresponding BinnedSpectrum with given settings of size and spread
167 for (Size i = 0; i < data.size(); i++)
168 {
169 //double sz(2), UInt sp(1);
170 binned_data.push_back(BinnedSpectrum(data[i], sz, false, sp, offset));
171 }
172
173 //create distancematrix for data with comparator
174 original_distance.clear();
175 original_distance.resize(data.size(), 1);
176
177 for (Size i = 0; i < binned_data.size(); i++)
178 {
179 for (Size j = 0; j < i; j++)
180 {
181 //distance value is 1-similarity value, since similarity is in range of [0,1]
182 original_distance.setValue(i, j, 1 - comparator(binned_data[i], binned_data[j]));
183 }
184 }
185
186 // create Clustering with ClusterMethod, DistanceMatrix and Data
187 clusterer(original_distance, cluster_tree, threshold_);
188 }
189
191 double getThreshold()
192 {
193 return threshold_;
194 }
195
199 void setThreshold(double x)
200 {
201 threshold_ = x;
202 }
203
204 };
205
211 class OPENMS_DLLAPI UnnormalizedComparator :
212 public Exception::BaseException
213 {
214 public:
215 UnnormalizedComparator(const char * file, int line, const char * function, const char * message
216 = "Clustering with unnormalized similarity measurement requested, normalized is mandatory") throw();
217 ~UnnormalizedComparator() throw() override;
218 };
219
220 }
221
OpenMS::Exception::BaseException
Exception base class.
Definition: Exception.h:89
OpenMS::UnnormalizedComparator
Exception thrown if clustering is attempted without a normalized compare functor. ...
Definition: ClusterHierarchical.h:211
OpenMS::DistanceMatrix::setValue
void setValue(SizeType i, SizeType j, ValueType value)
sets a value at a given position:
Definition: DistanceMatrix.h:263
OpenMS::ClusterHierarchical::cluster
void cluster(std::vector< PeakSpectrum > &data, const BinnedSpectrumCompareFunctor &comparator, double sz, UInt sp, float offset, const ClusterFunctor &clusterer, std::vector< BinaryTreeNode > &cluster_tree, DistanceMatrix< float > &original_distance)
clustering function for binned PeakSpectrum
Definition: ClusterHierarchical.h:154
OpenMS::ClusterFunctor
Base class for cluster functors.
Definition: ClusterFunctor.h:53
ClusterFunctor.h
Exception.h
OpenMS::ClusterHierarchical::cluster
void cluster(std::vector< Data > &data, const SimilarityComparator &comparator, const ClusterFunctor &clusterer, std::vector< BinaryTreeNode > &cluster_tree, DistanceMatrix< float > &original_distance)
Clustering function.
Definition: ClusterHierarchical.h:112
OpenMS::ClusterHierarchical::setThreshold
void setThreshold(double x)
Definition: ClusterHierarchical.h:199
OpenMS::DistanceMatrix::dimensionsize
SizeType dimensionsize() const
gives the number of rows (i.e. number of columns)
Definition: DistanceMatrix.h:418
StandardTypes.h
OpenMS::ClusterHierarchical
Hierarchical clustering with generic clustering functions.
Definition: ClusterHierarchical.h:63
OpenMS::DistanceMatrix::resize
void resize(SizeType dimensionsize, Value value=Value())
resizing the container
Definition: DistanceMatrix.h:349
OpenMS::ClusterHierarchical::~ClusterHierarchical
virtual ~ClusterHierarchical()
destructor
Definition: ClusterHierarchical.h:84
OpenMS::DistanceMatrix
A two-dimensional distance matrix, similar to OpenMS::Matrix.
Definition: DistanceMatrix.h:67
OpenMS::ClusterHierarchical::threshold_
double threshold_
the threshold given to the ClusterFunctor
Definition: ClusterHierarchical.h:68
DistanceMatrix.h
OpenMS::ClusterHierarchical::getThreshold
double getThreshold()
get the threshold
Definition: ClusterHierarchical.h:191
OpenMS
Main OpenMS namespace.
Definition: FeatureDeconvolution.h:46
OpenMS::ClusterHierarchical::ClusterHierarchical
ClusterHierarchical(const ClusterHierarchical &source)
copy constructor
Definition: ClusterHierarchical.h:78
OpenMS::ClusterHierarchical::ClusterHierarchical
ClusterHierarchical()
default constructor
Definition: ClusterHierarchical.h:72
PeakSpectrumCompareFunctor.h
OpenMS::BinnedSpectrumCompareFunctor
Base class for compare functors of BinnedSpectra.
Definition: BinnedSpectrumCompareFunctor.h:56
BinnedSpectrum.h
OpenMS::UInt
unsigned int UInt
Unsigned integer type.
Definition: Types.h:94
BinnedSpectrumCompareFunctor.h
OpenMS::BinnedSpectrum
This is a binned representation of a PeakSpectrum.
Definition: BinnedSpectrum.h:75
ClusterAnalyzer.h
OpenMS::DistanceMatrix::setValueQuick
void setValueQuick(SizeType i, SizeType j, ValueType value)
sets a value at a given position:
Definition: DistanceMatrix.h:309
OpenMS::DistanceMatrix::clear
void clear()
reset all
Definition: DistanceMatrix.h:327
OpenMS::Size
size_t Size
Size type e.g. used as variable which can hold result of size()
Definition: Types.h:127