1
// -*- mode: C++; tab-width: 2; -*-
4
// --------------------------------------------------------------------------
5
// OpenMS Mass Spectrometry Framework
6
// --------------------------------------------------------------------------
7
// Copyright (C) 2003-2011 -- Oliver Kohlbacher, Knut Reinert
9
// This library is free software; you can redistribute it and/or
10
// modify it under the terms of the GNU Lesser General Public
11
// License as published by the Free Software Foundation; either
12
// version 2.1 of the License, or (at your option) any later version.
14
// This library is distributed in the hope that it will be useful,
15
// but WITHOUT ANY WARRANTY; without even the implied warranty of
16
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17
// Lesser General Public License for more details.
19
// You should have received a copy of the GNU Lesser General Public
20
// License along with this library; if not, write to the Free Software
21
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
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-2013.
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.
23
30
// --------------------------------------------------------------------------
24
31
// $Maintainer: Clemens Groepl $
41
48
It offers a method to find element pairs across two element maps.
43
The similarity value should express our confidence that one element might
44
possibly be matched to the other. Larger quality values are better, the
45
maximal similarity is one. Let \f$\Delta_\textit{RT}\f$ and
46
\f$\Delta_\textit{MZ}\f$ be the absolute values of the RT and MZ differences
47
in the data. Then the similarity value is
50
\big( 1 + \Delta_\textit{RT} \cdot \textit{diff\_intercept\_RT} \big)^\textit{diff\_exponent\_RT}
52
\big( 1 + \Delta_\textit{MZ} \cdot \textit{diff\_intercept\_MZ} \big)^\textit{diff\_exponent\_MZ}
56
Choosing diff_exponent: This parameter controls the growth rate of the
57
penalty for differences. It is for example possible to search for pairs
58
using the absolute distance in RT (which should not be very susceptible to
59
outliers) and the squared distance in MZ (where small difference occur
60
frequently, but large differences indicate a mismatch).
62
Choosing diff_intercept: Since we are taking the reciprocal value ("1/..."),
63
we include an offset to avoid division by zero in case \f$\Delta=0\f$. To
64
set this parameter, ask yourself: How much worse is a difference of 1
65
compared to no difference?
67
The following image illustrates the influence of these parameters:
68
\image html SimplePairFinder.png "Influence of the parameters intercept and exponent"
70
@htmlinclude OpenMS_SimplePairFinder.parameters
72
@ingroup FeatureGrouping
50
The similarity value should express our confidence that one element might
51
possibly be matched to the other. Larger quality values are better, the
52
maximal similarity is one. Let \f$\Delta_\textit{RT}\f$ and
53
\f$\Delta_\textit{MZ}\f$ be the absolute values of the RT and MZ differences
54
in the data. Then the similarity value is
57
\big( 1 + \Delta_\textit{RT} \cdot \textit{diff\_intercept\_RT} \big)^\textit{diff\_exponent\_RT}
59
\big( 1 + \Delta_\textit{MZ} \cdot \textit{diff\_intercept\_MZ} \big)^\textit{diff\_exponent\_MZ}
63
Choosing diff_exponent: This parameter controls the growth rate of the
64
penalty for differences. It is for example possible to search for pairs
65
using the absolute distance in RT (which should not be very susceptible to
66
outliers) and the squared distance in MZ (where small difference occur
67
frequently, but large differences indicate a mismatch).
69
Choosing diff_intercept: Since we are taking the reciprocal value ("1/..."),
70
we include an offset to avoid division by zero in case \f$\Delta=0\f$. To
71
set this parameter, ask yourself: How much worse is a difference of 1
72
compared to no difference?
74
The following image illustrates the influence of these parameters:
75
\image html SimplePairFinder.png "Influence of the parameters intercept and exponent"
77
@htmlinclude OpenMS_SimplePairFinder.parameters
79
@ingroup FeatureGrouping
74
class OPENMS_DLLAPI SimplePairFinder
75
: public BaseGroupFinder
81
class OPENMS_DLLAPI SimplePairFinder :
82
public BaseGroupFinder
79
86
typedef BaseGroupFinder Base;
82
89
SimplePairFinder();
84
91
virtual ~SimplePairFinder()
88
95
/// returns an instance of this class
89
static BaseGroupFinder* create()
96
static BaseGroupFinder * create()
91
98
return new SimplePairFinder();
93
101
/// returns the name of this module
94
102
static const String getProductName()
100
@brief Run the algorithm
102
@note Exactly two @em input maps must be provided.
103
@note All two @em input maps must be provided.
105
@exception Exception::IllegalArgument is thrown if the input data is not valid.
107
virtual void run(const std::vector<ConsensusMap>& input_maps, ConsensusMap &result_map);
108
@brief Run the algorithm
110
@note Exactly two @em input maps must be provided.
111
@note All two @em input maps must be provided.
113
@exception Exception::IllegalArgument is thrown if the input data is not valid.
115
virtual void run(const std::vector<ConsensusMap> & input_maps, ConsensusMap & result_map);
112
120
virtual void updateMembers_();
114
122
/// A parameter for similarity_().