~ubuntu-branches/ubuntu/wily/openms/wily

« back to all changes in this revision

Viewing changes to include/OpenMS/ANALYSIS/MAPMATCHING/SimplePairFinder.h

  • Committer: Package Import Robot
  • Author(s): Filippo Rusconi
  • Date: 2013-12-20 11:30:16 UTC
  • mfrom: (5.1.2 sid)
  • Revision ID: package-import@ubuntu.com-20131220113016-wre5g9bteeheq6he
Tags: 1.11.1-3
* remove version number from libbost development package names;
* ensure that AUTHORS is correctly shipped in all packages.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
// -*- mode: C++; tab-width: 2; -*-
2
 
// vi: set ts=2:
3
 
//
4
 
// --------------------------------------------------------------------------
5
 
//                   OpenMS Mass Spectrometry Framework
6
 
// --------------------------------------------------------------------------
7
 
//  Copyright (C) 2003-2011 -- Oliver Kohlbacher, Knut Reinert
8
 
//
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.
13
 
//
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.
18
 
//
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.
 
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.
22
29
//
23
30
// --------------------------------------------------------------------------
24
31
// $Maintainer: Clemens Groepl $
40
47
 
41
48
  It offers a method to find element pairs across two element maps.
42
49
 
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
48
 
        \f[
49
 
        \frac{1}{
50
 
        \big( 1 + \Delta_\textit{RT} \cdot \textit{diff\_intercept\_RT} \big)^\textit{diff\_exponent\_RT}
51
 
        \cdot
52
 
        \big( 1 + \Delta_\textit{MZ} \cdot \textit{diff\_intercept\_MZ} \big)^\textit{diff\_exponent\_MZ}
53
 
        }
54
 
        \f]
55
 
        
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).
61
 
        
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?
66
 
 
67
 
        The following image illustrates the influence of these parameters:
68
 
        \image html SimplePairFinder.png "Influence of the parameters intercept and exponent"
69
 
        
70
 
        @htmlinclude OpenMS_SimplePairFinder.parameters
71
 
        
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
 
55
    \f[
 
56
    \frac{1}{
 
57
    \big( 1 + \Delta_\textit{RT} \cdot \textit{diff\_intercept\_RT} \big)^\textit{diff\_exponent\_RT}
 
58
    \cdot
 
59
    \big( 1 + \Delta_\textit{MZ} \cdot \textit{diff\_intercept\_MZ} \big)^\textit{diff\_exponent\_MZ}
 
60
    }
 
61
    \f]
 
62
 
 
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).
 
68
 
 
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?
 
73
 
 
74
    The following image illustrates the influence of these parameters:
 
75
    \image html SimplePairFinder.png "Influence of the parameters intercept and exponent"
 
76
 
 
77
    @htmlinclude OpenMS_SimplePairFinder.parameters
 
78
 
 
79
    @ingroup FeatureGrouping
73
80
  */
74
 
  class OPENMS_DLLAPI SimplePairFinder
75
 
        : public BaseGroupFinder
 
81
  class OPENMS_DLLAPI SimplePairFinder :
 
82
    public BaseGroupFinder
76
83
  {
77
 
         public:
78
 
                ///Base class
 
84
public:
 
85
    ///Base class
79
86
    typedef BaseGroupFinder Base;
80
87
 
81
88
    /// Constructor
82
89
    SimplePairFinder();
83
90
    /// Destructor
84
91
    virtual ~SimplePairFinder()
85
 
                {
86
 
                }
 
92
    {
 
93
    }
87
94
 
88
95
    /// returns an instance of this class
89
 
    static BaseGroupFinder* create()
 
96
    static BaseGroupFinder * create()
90
97
    {
91
98
      return new SimplePairFinder();
92
99
    }
 
100
 
93
101
    /// returns the name of this module
94
102
    static const String getProductName()
95
103
    {
96
104
      return "simple";
97
105
    }
98
106
 
99
 
                /**
100
 
                        @brief Run the algorithm
101
 
                        
102
 
                        @note Exactly two @em input maps must be provided.
103
 
                        @note All two @em input maps must be provided.
104
 
                        
105
 
                        @exception Exception::IllegalArgument is thrown if the input data is not valid.
106
 
                */
107
 
                virtual void run(const std::vector<ConsensusMap>& input_maps, ConsensusMap &result_map);
108
 
 
109
 
         protected:
110
 
                
111
 
                //docu in base class
 
107
    /**
 
108
        @brief Run the algorithm
 
109
 
 
110
        @note Exactly two @em input maps must be provided.
 
111
        @note All two @em input maps must be provided.
 
112
 
 
113
        @exception Exception::IllegalArgument is thrown if the input data is not valid.
 
114
    */
 
115
    virtual void run(const std::vector<ConsensusMap> & input_maps, ConsensusMap & result_map);
 
116
 
 
117
protected:
 
118
 
 
119
    //docu in base class
112
120
    virtual void updateMembers_();
113
121
 
114
122
    /// A parameter for similarity_().
122
130
 
123
131
    /**@brief Compute the similarity for a pair of elements.
124
132
    */
125
 
    DoubleReal similarity_ ( ConsensusFeature const & left, ConsensusFeature const & right) const;
 
133
    DoubleReal similarity_(ConsensusFeature const & left, ConsensusFeature const & right) const;
126
134
 
127
 
  }
128
 
  ; // SimplePairFinder
 
135
  }; // SimplePairFinder
129
136
 
130
137
} // namespace OpenMS
131
138