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: Andreas Bertsch $
47
@brief Implements a fitter for the Gamma distribution.
49
This class fits a Gamma distribution to a number of data points.
50
The results as well as the initial guess are specified using the struct
51
GammaDistributionFitResult.
53
The formula with the fitted parameters can be transformed into a
54
gnuplot formula using getGnuplotFormulai() after fitting.
56
The implementation is done using GSL fitting algorithms.
60
class OPENMS_DLLAPI GammaDistributionFitter
64
/// struct to represent the parameters of a gamma distribution
65
struct GammaDistributionFitResult
69
GammaDistributionFitResult()
75
GammaDistributionFitResult(const GammaDistributionFitResult& rhs)
81
GammaDistributionFitResult& operator = (const GammaDistributionFitResult& rhs)
91
/// parameter b of the gamma distribution
94
/// parameter p of the gamma distribution
98
/// Default constructor
99
GammaDistributionFitter();
101
virtual ~GammaDistributionFitter();
103
/// sets the gamma distribution start parameters b and p for the fitting
104
void setInitialParameters(const GammaDistributionFitResult& result);
107
@brief Fits a gamma distribution to the given data points
109
@param points Input parameter which represents the point used for the fitting
111
@exception Exception::UnableToFit is thrown if fitting cannot be performed
113
GammaDistributionFitResult fit(std::vector<DPosition<2> >& points);
115
/// returns the gnuplot formula of the fitted gamma distribution
116
const String& getGnuplotFormula() const;
120
static int gammaDistributionFitterf_(const gsl_vector* x, void* params, gsl_vector* f);
122
static int gammaDistributionFitterdf_(const gsl_vector* x, void* params, gsl_matrix* J);
124
static int gammaDistributionFitterfdf_(const gsl_vector* x, void* params, gsl_vector* f, gsl_matrix* J);
126
void printState_(size_t iter, gsl_multifit_fdfsolver* s);
128
GammaDistributionFitResult init_param_;
130
String gnuplot_formula_;
133
/// Copy constructor (not implemented)
134
GammaDistributionFitter(const GammaDistributionFitter& rhs);
135
/// assignment operator (not implemented)
136
GammaDistributionFitter& operator = (const GammaDistributionFitter& rhs);
54
@brief Implements a fitter for the Gamma distribution.
56
This class fits a Gamma distribution to a number of data points.
57
The results as well as the initial guess are specified using the struct
58
GammaDistributionFitResult.
60
The formula with the fitted parameters can be transformed into a
61
gnuplot formula using getGnuplotFormulai() after fitting.
63
The implementation is done using GSL fitting algorithms.
67
class OPENMS_DLLAPI GammaDistributionFitter
71
/// struct to represent the parameters of a gamma distribution
72
struct GammaDistributionFitResult
76
GammaDistributionFitResult() :
82
GammaDistributionFitResult(const GammaDistributionFitResult & rhs) :
88
GammaDistributionFitResult & operator=(const GammaDistributionFitResult & rhs)
98
/// parameter b of the gamma distribution
101
/// parameter p of the gamma distribution
105
/// Default constructor
106
GammaDistributionFitter();
108
virtual ~GammaDistributionFitter();
110
/// sets the gamma distribution start parameters b and p for the fitting
111
void setInitialParameters(const GammaDistributionFitResult & result);
114
@brief Fits a gamma distribution to the given data points
116
@param points Input parameter which represents the point used for the fitting
118
@exception Exception::UnableToFit is thrown if fitting cannot be performed
120
GammaDistributionFitResult fit(std::vector<DPosition<2> > & points);
122
/// returns the gnuplot formula of the fitted gamma distribution
123
const String & getGnuplotFormula() const;
127
static int gammaDistributionFitterf_(const gsl_vector * x, void * params, gsl_vector * f);
129
static int gammaDistributionFitterdf_(const gsl_vector * x, void * params, gsl_matrix * J);
131
static int gammaDistributionFitterfdf_(const gsl_vector * x, void * params, gsl_vector * f, gsl_matrix * J);
133
void printState_(size_t iter, gsl_multifit_fdfsolver * s);
135
GammaDistributionFitResult init_param_;
137
String gnuplot_formula_;
140
/// Copy constructor (not implemented)
141
GammaDistributionFitter(const GammaDistributionFitter & rhs);
142
/// assignment operator (not implemented)
143
GammaDistributionFitter & operator=(const GammaDistributionFitter & rhs);