|
Go to the documentation of this file. 1 #ifndef NPSI_MINUITLORPEBGCVFCN1D_HH_
2 #define NPSI_MINUITLORPEBGCVFCN1D_HH_
23 #include "Minuit2/FCNBase.h"
26 template < class Numeric, class NumIn= double>
56 const double signalFraction,
57 const unsigned nIntegrationPoints,
58 const NumIn* initialApproximation,
59 const unsigned lenApproximation,
60 const int symmetricBetaPower,
61 const double minimumBgFeatureSize,
62 const double effectiveNumBgEvents,
63 const double convergenceEpsilon,
64 const unsigned maxIterations,
66 const bool useLeastSquaresCV,
68 const bool bandwidthIsAbsolute,
69 const unsigned cvmode,
70 const double regularizationParameter,
76 initialApproximation_(initialApproximation),
77 signalFraction_(signalFraction),
80 convergenceEpsilon_(convergenceEpsilon),
81 regularizationParameter_(regularizationParameter),
82 minimumBgFeatureSize_(minimumBgFeatureSize),
83 effectiveNumBgEvents_(effectiveNumBgEvents),
85 lenApproximation_(lenApproximation),
86 nIntegrationPoints_(nIntegrationPoints),
87 maxIterations_(maxIterations),
89 m_(symmetricBetaPower),
92 bandwidthIsAbsolute_(bandwidthIsAbsolute),
93 useLeastSquaresCV_(useLeastSquaresCV)
95 densityBuffer_.resize(3*histo_.nBins());
100 inline unsigned long callCount() const { return callCount_;}
105 inline double getActualBandwidth( const double bwParameter,
106 const double maxDegree) const
108 double bandwidth = bwParameter;
109 if (!bandwidthIsAbsolute_)
114 const double minbw = minHistoBandwidth1D(
115 histo_, minimumBgFeatureSize_, maxDegree,
116 effectiveNumBgEvents_, m_);
117 bandwidth = minbw*exp(bwParameter);
129 virtual double operator()( const std::vector<double>& x) const
131 if (x.size() < 2U) throw std::invalid_argument(
132 "In npsi::MinuitLOrPEBgCVFcn1D::operator() : "
133 "at least two parameters needed");
135 const double maxDegree = x[1];
136 const double bandwidth = getActualBandwidth(x[0], maxDegree);
138 const unsigned nbins = histo_.nBins();
139 double* signalDensity = &densityBuffer_[0];
140 double* bgDensity = signalDensity + nbins;
141 double* densityMinusOne = bgDensity + nbins;
143 double convergenceDelta = 0.0;
145 histo_, fbuilder_, bm_, signal_, signalFraction_,
147 initialApproximation_, lenApproximation_,
148 m_, bandwidth, maxDegree,
149 convergenceEpsilon_, maxIterations_,
150 signalDensity, nbins, bgDensity, nbins,
151 workspace_, densityMinusOne, nbins,
152 cvmode_, regularizationParameter_, &convergenceDelta);
154 if (niter >= maxIterations_)
156 std::ostringstream os;
157 os << "In npsi::MinuitLOrPEBgCVFcn1D::operator() : "
158 << "background determination algorithm failed to converge.";
159 if (fabs(convergenceDelta) > convergenceEpsilon_)
160 os << " Requested divergence <= " << convergenceEpsilon_
161 << ", achieved only " << convergenceDelta << '.';
162 throw std::runtime_error(os.str());
166 if (useLeastSquaresCV_)
168 histo_, signalFraction_,
169 signalDensity, nbins, bgDensity, nbins,
170 densityMinusOne, nbins);
173 histo_, signalFraction_,
174 signalDensity, nbins, bgDensity, nbins,
175 densityMinusOne, nbins, minlog_);
179 std::cout << "MinuitLOrPEBgCVFcn1D " << callCount_
180 << ", bw " << bandwidth
181 << ", deg " << maxDegree;
182 if (useLeastSquaresCV_)
183 std::cout << ", lscv " << cv;
185 std::cout << ", pll " << -cv;
194 inline double Up() const { return up_;}
197 mutable std::vector<double> densityBuffer_;
198 mutable std::vector<double> workspace_;
203 const NumIn* initialApproximation_;
205 double signalFraction_;
208 double convergenceEpsilon_;
209 double regularizationParameter_;
210 double minimumBgFeatureSize_;
211 double effectiveNumBgEvents_;
213 mutable unsigned long callCount_;
214 unsigned lenApproximation_;
215 unsigned nIntegrationPoints_;
216 unsigned maxIterations_;
223 bool bandwidthIsAbsolute_;
224 bool useLeastSquaresCV_;
Utilities for semiparametric fitting of signal/backround mixtures.
Definition: MinuitLOrPEBgCVFcn1D.hh:28
virtual double operator()(const std::vector< double > &x) const Definition: MinuitLOrPEBgCVFcn1D.hh:129
MinuitLOrPEBgCVFcn1D(const npstat::HistoND< Numeric > &histo, npstat::AbsSymbetaFilterProvider &fbuilder, const npstat::AbsDistribution1D &signal, const double signalFraction, const unsigned nIntegrationPoints, const NumIn *initialApproximation, const unsigned lenApproximation, const int symmetricBetaPower, const double minimumBgFeatureSize, const double effectiveNumBgEvents, const double convergenceEpsilon, const unsigned maxIterations, const npstat::BoundaryHandling &bm, const bool useLeastSquaresCV, const bool verbose, const bool bandwidthIsAbsolute, const unsigned cvmode, const double regularizationParameter, const double minlog, const double up) Definition: MinuitLOrPEBgCVFcn1D.hh:53
Definition: AbsSymbetaFilterProvider.hh:28
Definition: BoundaryHandling.hh:21
Definition: HistoND.hh:46
A driver function for 1-d density estimation by LOrPE in a composite signal plus background model.
Definition: fitCompositeJohnson.hh:16
double lorpeBgCVLeastSquares1D(const HistoND< Numeric > &histo, double signalFraction, const NumOut *signalDensity, unsigned lenSignalDensity, const NumOut *bgDensity, unsigned lenBgDensity, const NumOut *densityMinusOne, unsigned lenDensityMinusOne)
double lorpeBgCVPseudoLogli1D(const HistoND< Numeric > &histo, double signalFraction, const NumOut *signalDensity, unsigned lenSignalDensity, const NumOut *bgDensity, unsigned lenBgDensity, const NumOut *densityMinusOne, unsigned lenDensityMinusOne, double minlog=log(DBL_MIN))
unsigned lorpeBackground1D(const HistoND< Numeric > &histo, AbsSymbetaFilterProvider &fbuilder, const BoundaryHandling &bm, const AbsDistribution1D &signal, double signalFraction, unsigned nIntegrationPoints, const NumIn *initialApproximation, unsigned lenApproximation, int m, double bandwidth, double maxDegree, double convergenceEpsilon, unsigned maxIterations, NumOut *signalDensity, unsigned lenSignalDensity, NumOut *bgDensity, unsigned lenBgDensity, std::vector< double > &workspace, NumOut *densityMinusOne=0, unsigned lenDensityMinusOne=0, unsigned cvmode=CV_MODE_LINEARIZED, double regularizationParameter=-1.0, double *lastDivergence=0)
Definition: AbsDistribution1D.hh:31
|